繁体   English   中英

Spring 云配置客户端出现错误无法配置数据源:未指定“url”属性

[英]Spring cloud-config client giving error Failed to configure a DataSource: 'url' attribute is not specified

  1. Spring 云配置服务器以 application.properties 启动:
server.port:8888
spring.application.name=test-config-server
spring.cloud.config.server.git.uri=https://gitlab.com/pearsontechnology/gpt/sms/sms-micro-services/config-server.git
spring.cloud.config.server.git.default-label=develop

#Private repo. access credentials
spring.cloud.config.server.git.username=xxx
spring.cloud.config.server.git.password=xxxx

spring.cloud.config.server.git.clone-on-start=true
spring.cloud.config.profile=dev

启动配置客户端时,无法配置数据源:未指定“url”属性,无法配置嵌入式数据源。

我的版本spring boot、spring-cloud和依赖从pom.xml如下:

<artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.2</version>
<java.version>17</java.version>
<spring-cloud.version>2021.0.3</spring-cloud.version>

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <scope>runtime</scope>
        </dependency>

配置客户端的application.prop:

spring.application.name=systems-lookup-service
spring.cloud.config.profile=dev
spring.config.import=optional:configserver:
server.port=8081

与数据源相关的属性,如 url 等,需要从 Git 上托管的 systems-lookup-service-dev.properties 中获取。

custom.url=jdbc:oracle:thin:@localhost:1998/smscert
custom.username=smscert
custom.password=go#salt
custom.driverClassName=

访问数据库的配置客户端中的 DAO class:

public class XXDaoImpl implements XXDao {

    private JdbcTemplate jdbcTemplate;

    @Autowired(required=false)
    private DataSourceConfig config;

    @Autowired
    public SystemDaoImpl(JdbcTemplate jdbcTemplateIn){
        final DataSource dataSource = DataSourceBuilder.create()
                                                        .driverClassName(config.getDriverClassName())
                                                        .url(config.getUrl())
                                                        .username(config.getUsername())
                                                        .password(config.getPassword())
                                                        .build();
        this.jdbcTemplate = new JdbcTemplate(dataSource);

    }
    
    ...............
}


@Component
@ConfigurationProperties("custom")
public class DataSourceConfig {

    private String url;

    private String username;

    private String password;

    //@Value("${greeting.message}")
    private String driverClassName;
    ....
}

我相信您会按照中央云注册的第一个引导程序进行操作,因此您需要在客户端服务pom文件中使用以下工件。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

将以下属性添加到您的客户端服务属性文件application.prop

spring.application.name=systems-lookup-service
spring.cloud.config.uri=http://localhost:"cloud-config-port"
spring.profiles.active=dev
spring.config.import=optional:configserver:

在中央云配置的主要 class 中添加注释@EnableConfigServer并在其中的pom文件中添加以下工件

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

append 以下属性到您的中央云配置属性文件

spring.application.name=configuration-server
server.port=8780
management.endpoints.web.exposure.include=*
spring.cloud.config.server.git.uri=file:absoluthe-path
spring.cloud.config.server.git.clone-on-start=true
spring.cloud.config.allowOverride=true

最后使用命名服务名称servicename-profile约定在您的 gitrepo 中添加您的客户端服务属性。

加分点

您可以考虑使用 spring cloud boss,用于热重载配置而不是重新启动服务以再次握手,在此处了解更多信息。

通过使用 @SpringBootApplication(exclude={DataSourceAutoConfiguration.class}) 注释 client main 来禁用数据源的自动配置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM