在我的SpringBoot项目中,我在src/main/resources/中有application.yml文件:
server:
port: 8080
spring:
datasource:
driver-class-name: org.sqlite.JDBC
...
我想把上面定义的属性绑定到一个Java类:
@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
public class DBConfig {
// I wished spring-boot could automatically bind it with 'driver-class-name' in application.yml
private String driverClassName;
...
@Bean
public DataSource dataSource() {
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driverClassName);
...
return dataSource;
}
}
我有注解@Configuration
和@ConfigurationProperties(prefix = "spring.datasource")
。我还指定了正确的前缀。但是当我运行我的应用程序时,我得到一个错误:
原因:org.springframework.beans.factory.BeanCreationException:创建在类路径资源[com/my/webapp/config/DBConfig.class]中定义的名为“dataSource”的Bean时出错:示例化[javax.sql.DataSource]失败:工厂方法“dataSource”引发异常,并显示消息:属性“driverClassName”不能为空
错误告诉driverClassName
是一个空字符串,所以绑定不起作用。我错过了什么?我使用的SQLite数据库不像MySQL,MariaDB等那样支持。在SpringBoot。因此我提供了一个datasourcebean类来将application.yml中的数据库配置绑定到手动创建的bean类。有必要吗?
2条答案
按热度按时间ygya80vv1#
配置属性的常用方法是将它们保存在单独的类中,并使用
@EnableConfigurationProperties
激活它们。你可以读这个article。你可以尝试如下操作:你的属性类看起来像这样:
但我不确定这是否是最好的解决方案,因为Spring已经有了自己的配置属性类,它绑定到前缀
spring.datasource
。第二个选项是使用Spring配置属性:
dohp0rv52#
你只需要在你的
DBConfig
类中为fields添加setter就可以了。