出错的代码
@Configuration
@ComponentScan
@EnableTransactionManagement
public class DataSourceConfig {
@Autowired
private PGProperties pgProperties
@Bean(name = "primaryDataSource",initMethod = "init", destroyMethod = "close")
@Qualifier("primaryDataSource")
@Primary
public DataSource primaryDataSource() {
PGXADataSource pgxa=new PGXADataSource();
pgxa.setURL(pgProperties.getJdbcUrl());
pgxa.setUser(pgProperties.getUsername());
pgxa.setPassword(pgProperties.getPassword());
AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
xaDataSource.setXaDataSource(pgxa);
xaDataSource.setUniqueResourceName("primaryDataSource");
return xaDataSource;
}
}
pgProperties.getJdbcUrl()处空指针异常,显然是@Autowired还没注入
解决办法
不使用@Autowired,将对象放在参数上public DataSource primaryDataSource(PGProperties pgProperties)就可以了。
@Configuration
@ComponentScan
@EnableTransactionManagement
public class DataSourceConfig {
@Bean(name = "primaryDataSource",initMethod = "init", destroyMethod = "close")
@Qualifier("primaryDataSource")
@Primary
public DataSource primaryDataSource(PGProperties pgProperties) {
PGXADataSource pgxa=new PGXADataSource();
pgxa.setURL(pgProperties.getJdbcUrl());
pgxa.setUser(pgProperties.getUsername());
pgxa.setPassword(pgProperties.getPassword());
AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();
xaDataSource.setXaDataSource(pgxa);
xaDataSource.setUniqueResourceName("primaryDataSource");
return xaDataSource;
}