Java 存在MyBatis@MapperScan时spring云配置客户端未注入属性
我有一个spring引导应用程序,它有3个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
@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就可以控制您的工厂。这真的重要吗?我的意思是,你认为改变这一点会解决数据源对象没有自动连接的问题吗?我在这个链接中意识到: