2016-10-17 5 views
0

У меня есть две конфигурации здеськак конфиг mybatis в springboot

@Configuration 
public class DataConfig { 

@Value("${datasource.jdbcUrl}") 
private String jdbcUrl; 
@Value("${datasource.username}") 
private String username; 
@Value("${datasource.password}") 
private String password; 
@Value("${datasource.driverClassName:com.mysql.jdbc.Driver}") 
private String driverClassName; 
@Value("${datasource.initialSize:20}") 
private int initialSize; 
@Value("${datasource.maxActive:30}") 
private int maxActive; 
@Value("${datasource.minIdle:20}") 
private int minIdle; 
@Value("${datasource.transactionTimeoutS:30}") 
private int transactionTimeoutS; 

@Value("${datasource.basePackage:com.tg.ms.mapper}") 
private String basePackage; 
@Value("${datasource.mapperLocations}") 
private String mapperLocations; 


@Bean 
public DataSource dataSource() { 
    DruidDataSource ds = new DruidDataSource(); 
    ds.setMaxWait(maxWait); 
    ds.setValidationQuery(validationQuery); 
    ds.setRemoveAbandoned(removeAbandoned); 
    ds.setRemoveAbandonedTimeout(removeAbandonedTimeout); 
    ds.setTestWhileIdle(testWhileIdle); 
    ds.setTestOnReturn(testOnReturn); 
    ds.setTestOnBorrow(testOnBorrow); 
    ds.setMinIdle(minIdle); 
    return ds; 
} 


@Bean 
public SqlSessionFactory sqlSessionFactoryBean() throws Exception { 

    SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); 
    sqlSessionFactoryBean.setDataSource(dataSource()); 

    PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); 

    sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mybatis/*.xml")); 

    return sqlSessionFactoryBean.getObject(); 
} 

---------- другой конфигурации -------------

@Configuration 
@AutoConfigureAfter(DataBaseConfig.class) 
public class MapperScannerConfig { 

@Value("${datasource.basePackage:com.tg.ms.mapper}") 
private String basePackage; 


@Bean 
public MapperScannerConfigurer BPMapperScannerConfigurer() { 
    System.out.println("mapper--1.----******----"+basePackage+"----*******"); 
    MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); 
    mapperScannerConfigurer.setBasePackage("com.tg.mapper"); 
    mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean"); 
    return mapperScannerConfigurer; 
} 
} 
  1. Могу ли я поставить @Bean public MapperScannerConfigurer BPMapperScannerConfigurer() в DataConfig? я стараюсь, но печать

    Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'testController': Unsatisfied dependency expressed through field 'testMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testMapper' defined in file [/Users/twogoods/codesource/mainetset/target/classes/com/tg/mapper/TestMapper.class]: Cannot resolve reference to bean 'sqlSessionFactoryBean' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactoryBean' defined in class path resource [com/tg/config/DataConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactoryBean' threw exception; nested exception is java.lang.NullPointerException

  2. MapperScannerConfig инициализации раньше DataConfig, я получить его из журнала печати, @Value("${datasource.basePackage:com.tg.ms.mapper}") private String basePackage; не может получить значение (в DataConfig можно получить), я использую @AutoConfigureAfter бесполезно, MapperScannerConfig также eariler, я не могу конфиг Mapper basePackage

    журнала: Cannot enhance @Configuration bean definition 'BPMapperScannerConfigurer' since its singleton instance has been created too early. The typical cause is a non-static @Bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'.

+0

Добавить полный стек. –

+0

Вы смотрите на это? https://github.com/mybatis/spring-boot-starter –

ответ

0

Я получил та же проблема. MapperScannerConfigurer инициализируется слишком рано в рамках весны, и, я думаю, что он вызывает аннотацию @AutoConfigureAfter становится бесполезным. Так я решить, как: избегать использования MapperScannerConfigurer: два способа:

  1. просто использовать @MapperScan ("com.abpackage")

  2. использование аннотаций @ org.apache.ibatis. annotations.Mapper в вашем интерфейсе mybatis mapper.

Смежные вопросы