• SpringBoot使用mybatis,发生:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured


    最近,配置项目,使用SpringBoot2.2.1,配置mybatis访问db,配好后,使用自定义的数据源。启动发生:

    APPLICATION FAILED TO START
    ***************************
    
    Description:
    
    Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    
    Reason: Failed to determine a suitable driver class
    
    
    Action:
    
    Consider the following:
    	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
    	If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).
    

      虽然,我知道,是因为我没有在application.yml文件中配置:spring.datasource。但是因为我是自定义的数据源,配置项不在spring.datasource,所以希望,不配置spring.datasource,也能启动项目。单纯在@SpringBootApplication(exclude = {DataSourceAutoConfigure.class})中排除DataSourceAutoConfigure是不行的。

           下面是解决方案:

            方案1:

            在自定义数据源中,添加自定义自动配置类。见下面的例子:

    import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.EnableAspectJAutoProxy;
    
    import javax.annotation.Resource;
    import javax.sql.DataSource;
    import java.util.Properties;
    
    /**
     * 自定义自动配置类
     * 1. 自定义数据源,自定义数据源是为了,防止因为没有在配置文件中,配置spring.datasource,
     * 出现:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
     * 2. 切面类,用来切换主从数据源
     *
     */
    @EnableAspectJAutoProxy
    @Configuration
    public class CustomDataSourceAutoConfiguration {
    
    
        @Bean
        @ConditionalOnMissingBean
        public DataSource defaultDataSource() {
                return new CustomDataSource());
            }
        }
    
        @Bean
        @ConditionalOnBean({DataSource.class})
        public CustomDataSourceAspect CustomDsAspect() {
            return new CustomDataSourceAspect();
        }
    }
    

      别忘了,在META-INF/spring.factories文件中配置:

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=
    com.xxx.framework.datasource.masterslave.CustomDataSourceAutoConfiguration 

      方案2:

           在启动类上,添加如下代码:

    import com.lzj.framework.datasource.multi.MultiDatabaseMapperFactoryBean;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    
    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    @MapperScan(basePackages = {"com.xxx.test.dao"}, factoryBean = MultiDatabaseMapperFactoryBean.class)
    public class LzjFrameworkTestApplication {
    
        public static void main(String[] args) {
             SpringApplication.run(LzjFrameworkTestApplication.class, args);
        }
    
    }
    

      第一要在@SpringBootApplication中排除DataSourceAutoConfiguration类的配置;第二,要配置@MapperScan,在参数中指出,扫描标准@Mapper注解的dao接口的包位置,和自定义factoryBean的实现类。factoryBean需要自己实现,需要继承MapperFactoryBean接口。

           当然,你要是不使用数据库,只需把DataSourceAutoConfiguration排除就可以了。

           项目,就可以正常启动了。

  • 相关阅读:
    SVN服务器搭建和配置使用详解
    Oracle命令大全
    mysql史上最全的学习资料
    jquery性能优化的38个建议
    vijosP1037搭建双塔
    vijosP1159 岳麓山上打水
    vijosP1038 添加括号
    BZOJP1003 [ZJOI2006]物流运输trans
    vijosP1006 晴天小猪历险记之Hill
    洛谷1043 数字游戏
  • 原文地址:https://www.cnblogs.com/feiyujun/p/11964310.html
Copyright © 2020-2023  润新知