spring使用DataSoure注入參數時報No supported DataSource type found

    日常閱讀源碼什麼的沒有目的性,因此不多去看什麼源碼,主要是比較繞看起來吃力,因此通常工做只是找個模版模仿一下。java

以上廢話,割————————————————————————————————————————————————————————————sql

    最近照常模仿使用了其它項目裏的DataSource用法,代碼以下:數據庫

    

 1    @Bean
 2     @Primary
 3     @ConfigurationProperties(prefix = "datasource.from")
 4     public DataSource dataSource(){
 5         return DataSourceBuilder.create().build();
 6     }
 7     
 8     @Autowired
 9     @Qualifier("dataSource")
10     private DataSource dataSource;
11 
12     @Bean(name="sqlSessionFactory")
13     public SqlSessionFactory sqlSessionFactory() throws Exception {
14         SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
15         bean.setDataSource(dataSource);
16         bean.setConfigLocation(new ClassPathResource("MybatisConfig.xml"));
17         return bean.getObject();
18     }

    在運行初始化的時候報「No supported DataSource type found」,查找網上資料又說沒有指定數據庫類型的。apache

    因而,本身在配置中增長了datasource.from.type=oracle,運行仍是報同樣的錯。因而,到晚上腦子清醒點時,看了下DataSource初始化時的部分源碼。tomcat

    主要的是第三段代碼以下:oracle

1 private static final String[] DATA_SOURCE_TYPE_NAMES = { "org.apache.tomcat.jdbc.pool.DataSource", "com.zaxxer.hikari.HikariDataSource", "org.apache.commons.dbcp.BasicDataSource", "org.apache.commons.dbcp2.BasicDataSource" };
public Class<? extends DataSource> findType(){
    if (this.type != null) {
        return this.type;
    }
    for (String name : DATA_SOURCE_TYPE_NAMES) {
    try {
        return ClassUtils.forName(name, this.classLoader);
    }catch (Exception ex) {}
1  private Class<? extends DataSource> getType() {
2       Class<? extends DataSource> type = findType();
3       if (type != null) {
4         return type;
5       }
6       throw new IllegalStateException("No supported DataSource type found");
7     }
1 public DataSource build() {
2      Class<? extends DataSource> type = getType();
3      DataSource result = (DataSource)BeanUtils.instantiate(type);
4      maybeGetDriverClassName();
5      bind(result);
6      return result;
7    }

    看完上面的代碼就明白爲何報錯了,就是說在建立DataSource沒有找到javax.sql.DataSource的子類,也就是必需要引入DATA_SOURCE_TYPE_NAMES枚舉中涉及類的jar包,另外注意引入對應數據庫JDBC的jar包。ui

 

以上,Good lucky!this

相關文章
相關標籤/搜索