首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法配置url:未指定‘datasource’属性,并且在使用自定义数据源格式时无法配置嵌入的数据源

无法配置url:未指定‘datasource’属性,并且在使用自定义数据源格式时无法配置嵌入的数据源
EN

Stack Overflow用户
提问于 2021-02-24 16:15:39
回答 1查看 166关注 0票数 0

当我启动我的spring boot应用程序时,它显示以下错误:

代码语言:javascript
复制
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

这是我的数据源配置:

代码语言:javascript
复制
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource

## master
spring.datasource.druid.illidan.master.name = primary_db
spring.datasource.druid.illidan.master.url = jdbc:mysql://127.0.0.1:3309/report-fat?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&useSSL=false&verifyServerCertificate=false
spring.datasource.druid.illidan.master.username = root
spring.datasource.druid.illidan.master.password = LogSsDk87Fm2RXSVHMnwjvtA5Nncs2kT7nWrRkB06BcBNPwyTnaf60jNG+ENeyuhYm+X1fWj59XHFiXqiw==
spring.datasource.druid.illidan.master.connection-properties = config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKwORT+pNusNtC433Kdmk18WTYbxu0gGAWBccQrK+h0PHElZrEsJDqj9yvNq2Rwzw6d/YwECio3bS+yMCAwEAAQ==
spring.datasource.druid.illidan.master.driver-class-name = com.mysql.cj.jdbc.Driver

#
# slave
spring.datasource.druid.illidan.slave.name = primary_db
spring.datasource.druid.illidan.slave.url = jdbc:mysql://127.0.0.1:3309/report-fat?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&useSSL=false&verifyServerCertificate=false
spring.datasource.druid.illidan.slave.username = root
spring.datasource.druid.illidan.slave.password = LogSsDk87Fm2RXSVHMnwjvtA5Nncs2kRT7nWrRkB06BcBNPwyTnbd+af60jNG+ENeyuhYm+X1fWj59XHFiXqiw==
spring.datasource.druid.illidan.slave.connection-properties = config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKwORT+pNusNtC433Kdmk18WTYbxu0gGAWBccQrK+h0PHElZrEsJDqj9yvNq2Rwzwx9PoWRn6d/YwECio3bS+yMCAwEAAQ==
spring.datasource.druid.illidan.slave.driver-class-name = com.mysql.cj.jdbc.Driver

这是我的数据源配置:

代码语言:javascript
复制
    package com.sportswin.soa.illidan.config;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.sportswin.soa.misc.config.db.ReadWriteSplitRoutingDataSource;
import com.sportswin.soa.misc.constant.db.ConstantPool;
import com.sportswin.soa.misc.interceptor.db.DefaultTimeInterceptor;
import com.sportswin.soa.misc.spring.aspect.db.UseSlaveAspect;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author dolphin
 */
@Configuration
@MapperScan(basePackages = {"com.sportswin.soa.illidan.dao"}, sqlSessionTemplateRef = "sqlSessionTemplate")
public class DataSourceConfig {


    /**
     * 数据库连接池类型
     */
    @Value("${spring.datasource.type}")
    private Class<? extends DataSource> dataSourceType;


    @Bean(name = "dataSource")
    @Qualifier(value = "dataSource")
    @Primary
    @DependsOn({ "masterDataSource", "slaveDataSource" })
    public DataSource dataSource(@Qualifier("masterDataSource") DataSource masterDataSource,
                                 @Qualifier("slaveDataSource") DataSource slaveDataSource) {
        System.out.println(masterDataSource.toString());
        System.out.println(slaveDataSource.toString());
        ReadWriteSplitRoutingDataSource writeSplitRoutingDataSource = new ReadWriteSplitRoutingDataSource();
        Map<Object, Object> targetDataSources = new HashMap<Object, Object>();
        targetDataSources.put(ConstantPool.MASTER_KEY, masterDataSource);
        targetDataSources.put(ConstantPool.SLAVE_KEY, slaveDataSource);
        writeSplitRoutingDataSource.setTargetDataSources(targetDataSources);
        writeSplitRoutingDataSource.setDefaultTargetDataSource(masterDataSource);


        List<String> slaveDataSourceNames = new ArrayList<String>();
        slaveDataSourceNames.add(ConstantPool.SLAVE_KEY);

        UseSlaveAspect.setSlaveDataSourceNames(slaveDataSourceNames);
        return writeSplitRoutingDataSource;
    }



    /**
     * 主数据库(写数据库)
     * @return
     */
    @Bean(name = "masterDataSource", destroyMethod = "close", initMethod = "init")
    @ConfigurationProperties(prefix = "spring.datasource.druid.illidan.master")
    public DataSource masterDataSource() {
        System.out.println("主库");
        return DruidDataSourceBuilder.create().build();
    }

    /**
     * 从数据库1(只读数据库)
     * @return
     */
    @Bean(name = "slaveDataSource", destroyMethod = "close", initMethod = "init")
    @ConfigurationProperties(prefix = "spring.datasource.druid.illidan.slave")
    public DataSource slaveDataSource(){
        System.out.println("从库");
        return DruidDataSourceBuilder.create().build();
    }

    @Autowired
    private PaginationInterceptor paginationInterceptor;
    @Autowired
    private DefaultTimeInterceptor defaultTimeInterceptor;


    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mybatis-config.xml"));
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/*/*.xml"));

        Interceptor[] plugins = {paginationInterceptor,defaultTimeInterceptor};
        bean.setPlugins(plugins);

        return bean.getObject();
    }

    @Bean(name = "transactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}

为什么会发生这种情况,我应该做些什么来修复它?

EN

回答 1

Stack Overflow用户

发布于 2021-02-24 16:28:12

您是否可以尝试在每个数据源中移动您的数据源类型。

代码语言:javascript
复制
remove it from here -> spring.datasource.type = com.alibaba.druid.pool.DruidDataSource

## master
spring.datasource.druid.illidan.master.type = com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.illidan.master.name = primary_db
spring.datasource.druid.illidan.master.url = jdbc:mysql://127.0.0.1:3309/report-fat?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&useSSL=false&verifyServerCertificate=false
spring.datasource.druid.illidan.master.username = root
spring.datasource.druid.illidan.master.password = LogSsDk87Fm2RXSVHMnwjvtA5Nncs2kT7nWrRkB06BcBNPwyTnaf60jNG+ENeyuhYm+X1fWj59XHFiXqiw==
spring.datasource.druid.illidan.master.connection-properties = config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKwORT+pNusNtC433Kdmk18WTYbxu0gGAWBccQrK+h0PHElZrEsJDqj9yvNq2Rwzw6d/YwECio3bS+yMCAwEAAQ==
spring.datasource.druid.illidan.master.driver-class-name = com.mysql.cj.jdbc.Driver

#
# slave
spring.datasource.druid.illidan.slave.type = com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.illidan.slave.name = primary_db
spring.datasource.druid.illidan.slave.url = jdbc:mysql://127.0.0.1:3309/report-fat?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&useSSL=false&verifyServerCertificate=false
spring.datasource.druid.illidan.slave.username = root
spring.datasource.druid.illidan.slave.password = LogSsDk87Fm2RXSVHMnwjvtA5Nncs2kRT7nWrRkB06BcBNPwyTnbd+af60jNG+ENeyuhYm+X1fWj59XHFiXqiw==
spring.datasource.druid.illidan.slave.connection-properties = config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKwORT+pNusNtC433Kdmk18WTYbxu0gGAWBccQrK+h0PHElZrEsJDqj9yvNq2Rwzwx9PoWRn6d/YwECio3bS+yMCAwEAAQ==
spring.datasource.druid.illidan.slave.driver-class-name = com.mysql.cj.jdbc.Driver
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66346995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档