У меня есть приложение с весенней загрузкой с 3 @Configuration
аннотированными классами: Application, DBScannerConfig и ElasticSearchConfiguration. Мое приложение также использует конфигурацию с сервера Spring Cloud Config.
Проблема в том, что когда я пытаюсь аннотировать атрибуты с помощью @Value("${key}")
внутри класса DBScannerConfig, свойства не внедряются. Однако, если я использую аннотацию @Value("${key}")
в двух других классах, конфигурация работает хорошо.
Я действительно думаю, что это может быть связано с аннотацией @MapperScan
, присутствующей в моем классе конфигурации DBScannerConfig.
Я хотел бы либо получить свойства, либо источник данных autowire spring в моем аннотированном классе @MapperScan
, но я не могу добиться этого.
Кто-нибудь сталкивался с этой проблемой раньше? Вот код:
Application.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.
Я попытался автоматически связать объект Datasource внутри моего класса Application.java, а затем безуспешно использовать его в DBSCannerConfig.java. Как только я добавляю аннотацию @MapperScan
в класс Application.java, он перестает автоматически связывать источник данных Spring.
mySqlSessionFactory(DataSource dataSource)
. Также не вызывайтеgetObject
, а просто вернитеSqlSessionFactoryBean
таким образом, Spring будет контролировать вашу фабрику. - person M. Deinum   schedule 21.12.2015