3

我有一个带有 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;
    }
}

如果我取消注释@AutowiredApplication.java 中的数据源,我会得到一个有效的对象。但是,在 DBScannerConfig.java 中,我得到的是 NULL。

我尝试在我的 Application.java 类中自动装配 Datasource 对象,然后在 DBSCannerConfig.java 中使用它,但没有成功。一旦我将@MapperScan注释添加到 Application.java 类中,它就会停止自动装配 spring 数据源。

4

0 回答 0