@Configuration
Application、DBScannerConfig、ElasticSearchConfiguration という3 つの注釈付きクラスを持つスプリング ブート アプリケーションがあります。私のアプリケーションは、Spring Cloud Config Server からの構成も使用します。
問題は@Value("${key}")
、DBScannerConfig クラス内で属性に注釈を付けようとすると、プロパティが挿入されないことです。ただし、@Value("${key}")
他の 2 つのクラスでアノテーションを使用すると、構成はうまく機能します。
実際に@MapperScan
は、DBScannerConfig 構成クラスに存在する注釈に関連している可能性があると思います。
私がやりたいことは、@MapperScan
注釈付きのクラスでプロパティを取得するか、スプリングのデータソースを自動配線できるようにすることですが、そのようなことを達成することはできません。
以前にこの問題に直面した人はいますか? コードは次のとおりです。
アプリケーション.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 で使用しようとしましたが、うまくいきませんでした。注釈を Application.java クラスに追加するとすぐに、@MapperScan
Spring データソースの自動配線が停止します。