我有一个带有 3 个带@Configuration
注释类的 spring-boot 应用程序:Application、DBScannerConfig 和 ElasticSearchConfiguration。我的应用程序还使用来自 Spring Cloud Config Server 的配置。
问题是,当我尝试@Value("${key}")
在 DBScannerConfig 类中注释属性时,属性不会被注入。但是,如果我@Value("${key}")
在其他两个类中使用注释,则配置效果很好。
我实际上认为它可能与@MapperScan
我的 DBScannerConfig 配置类中存在的注释有关。
我想做的是能够在我的@MapperScan
带注释的类中检索属性或自动装配 spring 的数据源,但我无法实现这样的事情。
以前有人遇到过这个问题吗?这是代码:
应用程序.java
@SpringBootApplication
@EnableElasticsearchRepositories("org.myapp.elastic.repository")
@ComponentScan(basePackages = {"org.myapp"})
public class Application extends WebSecurityConfigurerAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);
// @Autowired
// DataSource dataSource;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
//Other Stuff for Spring Security
}
DBScannerConfig.java
@Configuration
@MapperScan("org.myapp.persistence.mapper")
public class DBScannerConfig{
@Autowired
DataSource dataSource;
@Bean(name = "mySqlSessionFactory")
public SqlSessionFactory mySqlSessionFactory() {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setTypeAliasesPackage("org.myapp.persistence.entity");
SqlSessionFactory sqlSessionFactory = null;
try {
sqlSessionFactory = sessionFactory.getObject();
} catch (Exception e) {
LOGGER.error("Error creating mySqlSessionFactory", e);
}
return sqlSessionFactory;
}
}
如果我取消注释@Autowired
Application.java 中的数据源,我会得到一个有效的对象。但是,在 DBScannerConfig.java 中,我得到的是 NULL。
我尝试在我的 Application.java 类中自动装配 Datasource 对象,然后在 DBSCannerConfig.java 中使用它,但没有成功。一旦我将@MapperScan
注释添加到 Application.java 类中,它就会停止自动装配 spring 数据源。