首页 > 解决方案 > Spring Boot 无法读取 Yaml 属性

问题描述

我编写了一个 spring 批处理应用程序,在 src/main/resources 文件夹中配置了数据库连接属性。

作业配置如下:

@Import({DataSourceConfiguration.class})
@Configuration
public class JobConfiguration {
    @Autowired
    private DataSourceConfiguration dataSourceConfig;
    ......
}

DataSourceConfiguration 类如下:

@Configuration
@EnableConfigurationProperties(DatabaseConfiguration.class)
public class DataSourceConfiguration {

    @Autowired
    private DatabaseConfiguration dbConfiguration;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();

        dataSource.setDriverClassName(dbConfiguration.getDriver());
        dataSource.setUrl(dbConfiguration.getUrl());
        dataSource.setUsername(dbConfiguration.getUser());
        dataSource.setPassword(dbConfiguration.getPassword());

        return dataSource;
    }
}

DatabaseConfiguration 类如下:

@ConfigurationProperties("jdbc")
public class DatabaseConfiguration {
    private String driver;
    private String url;
    private String user;
    private String password;

    //getter/setter methods
    ......
}

application.yml 文件如下:

jdbc:
    driver: oracle.jdbc.OracleDriver
    url: 'jdbc:oracle:thin:@hostname'
    user: username
    password: password

当我运行 spring 批处理时,异常显示属性不是从 yml 文件中读取的。我已遵循上述配置的文档,但我不知道缺少什么。请阐明这一点。谢谢。

Caused by: java.lang.IllegalArgumentException: Property 'driverClassName' 
must not be empty
at org.springframework.util.Assert.hasText(Assert.java:276)
at org.springframework.jdbc.datasource.DriverManagerDataSource.setDriverClassName(DriverManagerDataSource.java:124)
at com.telus.workforcemgmt.batchcloud.configuration.DataSourceConfiguration.dataSource(DataSourceConfiguration.java:28)
at com.telus.workforcemgmt.batchcloud.configuration.DataSourceConfiguration$$EnhancerBySpringCGLIB$$7e128c57.CGLIB$dataSource$4(<generated>)
at com.telus.workforcemgmt.batchcloud.configuration.DataSourceConfiguration$$EnhancerBySpringCGLIB$$7e128c57$$FastClassBySpringCGLIB$$b7fd119a.invoke(<generated>)

标签: configurationyamlspring-batch

解决方案


检查 DatabaseConfiguration.java 中“驱动程序”属性的设置方法名称

是吗?

public void setDriver(String driver) {
        this.driver = driver;
    }

推荐阅读