配置数据源属性

时间:2017-07-27 18:21:41

标签: java spring datasource

我在java bean配置类中设置数据源属性时遇到问题。似乎没有从yaml文件中正确读取属性。当尝试访问驱动程序类名时,我得到一个空指针异常。

这是我的java bean配置文件:

@Configuration
public class AppConfig {

    @Autowired
    private DataSourceProperties properties;

    //other beans here

    @Bean
    public DataSource dataSource(){
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName(properties.getDriverClassName());
        dataSource.setJdbcUrl(properties.getUrl());
        dataSource.setUsername(properties.getUsername());
        dataSource.setPassword(properties.getPassword());

    @Bean
    public DataSourceProperties properties(){
        return new DataSourceProperties();
    }
}

我也尝试过:

@Configuration
public class AppConfig {

    //other beans here

    @Bean
    public DataSource dataSource(DataSourceProperties properties){
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName(properties.getDriverClassName());
        dataSource.setJdbcUrl(properties.getUrl());
        dataSource.setUsername(properties.getUsername());
        dataSource.setPassword(properties.getPassword());

        return dataSource;
    }

    @Bean
    public DataSourceProperties properties(){
        return new DataSourceProperties();
    }

}

我还尝试使用springframeowrk.jdbc的DriverManagerDataSource而不是Hikari,但它仍然不起作用。

这是我在src / main / resources中的application.yml文件:

spring:
    datasource:
        driverClassName: 'com.ibm.db2.jcc.DB2Driver'
        username: 'appUsername'
        password: 'appPw'
        url: 'datasourceURL'      

有没有人遇到类似的问题,并且知道如何设置正确设置属性?

2 个答案:

答案 0 :(得分:1)

在application.yml中配置DataSource时,您不需要额外的Bean。

答案 1 :(得分:1)

我的配置示例:

spring:
  datasource:
    driverClassName: org.mariadb.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db
    username: user
    password: pass
    connectionInitSql: "SET NAMES 'utf8mb4'" # hikari
    validationQuery: SELECT 1
    type: com.zaxxer.hikari.HikariDataSource

hikari还有其他选项,例如connectionInitSql。如前所述,不需要自己的配置。