Java 存在MyBatis@MapperScan时spring云配置客户端未注入属性

Java 存在MyBatis@MapperScan时spring云配置客户端未注入属性,java,spring,spring-boot,spring-cloud,spring-mybatis,Java,Spring,Spring Boot,Spring Cloud,Spring Mybatis,我有一个spring引导应用程序,它有3个@Configuration注释类:application、DBScannerConfig和ElasticSearchConfiguration。我的应用程序还使用Spring云配置服务器的配置 问题是,当我尝试在DBScannerConfig类中使用@Value(“${key}”)注释属性时,属性不会被注入。但是,如果在其他两个类中使用@Value(${key}”)注释,则配置工作正常 实际上,我认为它可能与DBScannerConfig配置类中的@M

我有一个spring引导应用程序,它有3个
@Configuration
注释类:application、DBScannerConfig和ElasticSearchConfiguration。我的应用程序还使用Spring云配置服务器的配置

问题是,当我尝试在DBScannerConfig类中使用
@Value(“${key}”)
注释属性时,属性不会被注入。但是,如果在其他两个类中使用
@Value(${key}”)
注释,则配置工作正常

实际上,我认为它可能与DBScannerConfig配置类中的
@MapperScan
注释有关

我想做的是在我的
@MapperScan
注释类中检索属性或autowire spring的数据源,但我无法实现这一点

以前有人遇到过这个问题吗?代码如下:

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
}
@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;
    }
}
DBScannerConfig.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
}
@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;
    }
}
如果我取消对Application.java中的
@Autowired
数据源的注释,我会得到一个有效的对象。但是,在DBScannerConfig.java中,我得到的是NULL


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

有点过于通用,您应该添加一些关于如何定义bean的细节。XML,JavaConf?它是基于java的配置。让我用一些代码片段编辑条目。为什么需要事务管理器?Spring Boot已经配置了一个。将数据源而不是类注入到方法中,即
mySqlSessionFactory(datasource-datasource)
。也不要调用
getObject
,只需返回
SqlSessionFactoryBean
,这样spring就可以控制您的工厂。这真的重要吗?我的意思是,你认为改变这一点会解决数据源对象没有自动连接的问题吗?我在这个链接中意识到: