[英]spring boot: getting this error - Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured
[英]Spring cloud-config client giving error Failed to configure a DataSource: 'url' attribute is not specified
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.