2016-10-17 2 views
0

에서의 MyBatis을 config (설정)하는 방법을 내가 여기에 두 가지 설정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. 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이다, 쓸모 내가있어 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

: 나는 매퍼 basePackage에게

로그를 config (설정) 할 수 같은 문제. MapperScannerConfigurer는 봄 프레임 워크에서 너무 일찍 초기화되며 주석이 @AutoConfigureAfter가 쓸모 없게 만듭니다. 그래서 내가 좋아하는 그것을 해결 : MapperScannerConfigurer의 사용을 피하십시오 : 두 가지 방법 :

  1. 그냥 @MapperScan ("com.abpackage")

  2. 사용 주석 @의 org.apache.ibatis을 사용합니다. mybatis 매퍼 인터페이스의 주석.