Configuration spring boot无法读取Yaml属性

Configuration spring boot无法读取Yaml属性,configuration,yaml,spring-batch,Configuration,Yaml,Spring Batch,我编写了一个spring批处理应用程序,在src/main/resources文件夹中配置了数据库连接属性 作业配置如下所示: @Import({DataSourceConfiguration.class}) @Configuration public class JobConfiguration { @Autowired private DataSourceConfiguration dataSourceConfig; ...... } @Configuration

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

作业配置如下所示:

@Import({DataSourceConfiguration.class})
@Configuration
public class JobConfiguration {
    @Autowired
    private DataSourceConfiguration dataSourceConfig;
    ......
}
@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;
    }
}
@ConfigurationProperties("jdbc")
public class DatabaseConfiguration {
    private String driver;
    private String url;
    private String user;
    private String password;

    //getter/setter methods
    ......
}
jdbc:
    driver: oracle.jdbc.OracleDriver
    url: 'jdbc:oracle:thin:@hostname'
    user: username
    password: password
DataSourceConfiguration类如下所示:

@Import({DataSourceConfiguration.class})
@Configuration
public class JobConfiguration {
    @Autowired
    private DataSourceConfiguration dataSourceConfig;
    ......
}
@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;
    }
}
@ConfigurationProperties("jdbc")
public class DatabaseConfiguration {
    private String driver;
    private String url;
    private String user;
    private String password;

    //getter/setter methods
    ......
}
jdbc:
    driver: oracle.jdbc.OracleDriver
    url: 'jdbc:oracle:thin:@hostname'
    user: username
    password: password
DatabaseConfiguration类如下所示:

@Import({DataSourceConfiguration.class})
@Configuration
public class JobConfiguration {
    @Autowired
    private DataSourceConfiguration dataSourceConfig;
    ......
}
@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;
    }
}
@ConfigurationProperties("jdbc")
public class DatabaseConfiguration {
    private String driver;
    private String url;
    private String user;
    private String password;

    //getter/setter methods
    ......
}
jdbc:
    driver: oracle.jdbc.OracleDriver
    url: 'jdbc:oracle:thin:@hostname'
    user: username
    password: password
application.yml文件如下所示:

@Import({DataSourceConfiguration.class})
@Configuration
public class JobConfiguration {
    @Autowired
    private DataSourceConfiguration dataSourceConfig;
    ......
}
@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;
    }
}
@ConfigurationProperties("jdbc")
public class DatabaseConfiguration {
    private String driver;
    private String url;
    private String user;
    private String password;

    //getter/setter methods
    ......
}
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>)
原因:java.lang.IllegalArgumentException:属性“driverClassName”
不能是空的
位于org.springframework.util.Assert.hasText(Assert.java:276)
位于org.springframework.jdbc.datasource.DriverManagerDataSource.setdrivercassname(DriverManagerDataSource.java:124)
位于com.telus.workforcemgmt.batchcloud.configuration.DataSourceConfiguration.dataSource(DataSourceConfiguration.java:28)
在com.telus.workforcemgmt.batchcloud.configuration.DataSourceConfiguration$$EnhancerBySpringCGLIB$$7e128c57.CGLIB$dataSource$4()
在com.telus.workforcemgmt.batchcloud.configuration.DataSourceConfiguration$$EnhancerBySpringCGLIB$$7e128c57$$FastClassBySpringCGLIB$$b7fd119a.invoke()

在DatabaseConfiguration.java中检查setter方法名称中的“driver”属性

是吗

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

最后,我能够通过环境api检索属性,但不确定为什么配置属性绑定不起作用。修改后的版本粘贴在下面:

@Configuration
@PropertySource("classpath:application.yml")
public class DataSourceConfiguration {

@Autowired
Environment env;

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

    dataSource.setDriverClassName(env.getProperty("jdbc.driver"));
    dataSource.setUrl(env.getProperty("jdbc.url"));
    dataSource.setUsername(env.getProperty("jdbc.user"));
    dataSource.setPassword(env.getProperty("jdbc.password"));

    return dataSource;
}

我在系统中复制了您的配置代码。为了重现相同的错误,我删除了setter。它抛出了与您得到的相同的异常。所有的setter都是正确的,因此错误不应该是由setter引起的@dhana1310,你能用setter成功运行吗?是的,当我添加setter和你所有的配置文件时,它正在成功运行。为了便于参考,我添加了一个git分支。已成功执行。我将在
数据库配置
类中使用
drivercassname
(及其相应的getter/setter)更改
驱动程序