SpringBoot 多数据源配置/连接两个数据库 (SpringBoot+Mysql+SqlServer)(亲测可用)

Boot项目原配Mysql数据库 。业务需要加上sqlserver数据库   网上看了两天  趟了不少坑。

其实网上帖子挺全的,我遇到的问题没有太多相关介绍。现在搞好后分享给大家,自己也做个记录。

 

1.首先 依赖配置                       

   按需配置重点是数据库jar包跟bootjar包。版本无需考虑

<!-- 数据库 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.14</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>

		<!-- jfreechart -->
		<dependency>
			<groupId>org.jfree</groupId>
			<artifactId>jfreechart</artifactId>
			<version>1.0.19</version>
			<exclusions>
				<exclusion>
					<artifactId>xml-apis</artifactId>
					<groupId>xml-apis</groupId>
				</exclusion>
				<exclusion>
					<artifactId>bcprov-jdk14</artifactId>
					<groupId>bouncycastle</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		
		<!-- 热部署 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>
		 
		<!-- 单元测试 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

		<!-- JWT -->
		<dependency>
		    <groupId>com.auth0</groupId>
		    <artifactId>java-jwt</artifactId>
		    <version>3.4.0</version>
		</dependency>
		       		
		<!-- GDS Engine pool -->
		<dependency>
		    <groupId>org.apache.commons</groupId>
		    <artifactId>commons-pool2</artifactId>
		</dependency>
    	<dependency>
        	<groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
    	</dependency>

		<!-- JSON -->
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
        
        <!-- for pdf start -->
		<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.4.2</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.xhtmlrenderer</groupId>
            <artifactId>flying-saucer-pdf</artifactId>
            <version>9.0.3</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
        </dependency>
		<!-- for pdf end -->
        
        <!-- used by swagger  -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
        
       	<!-- used by kettle -->
		<dependency>
    		<groupId>commons-io</groupId>
    		<artifactId>commons-io</artifactId>
    		<version>2.2</version>
		</dependency>
       		
        <!-- used by drools -->
		<dependency>
    		<groupId>org.drools</groupId>
    		<artifactId>drools-core</artifactId>
    		<version>7.16.0.Final</version>
		</dependency>
		<dependency>
    		<groupId>org.drools</groupId>
    		<artifactId>drools-compiler</artifactId>
    		<version>7.16.0.Final</version>
		</dependency>
		<dependency>
    		<groupId>org.drools</groupId>
    		<artifactId>drools-templates</artifactId>
    		<version>7.16.0.Final</version>
		</dependency>
		<dependency>
    		<groupId>org.kie</groupId>
    		<artifactId>kie-api</artifactId>
    		<version>7.16.0.Final</version>
		</dependency>
		<dependency>
    		<groupId>org.kie</groupId>
    		<artifactId>kie-spring</artifactId>
    		<version>7.16.0.Final</version>
		</dependency>
		
		 <!--访问静态jsp页面 -->
		<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jsp-api</artifactId>
        </dependency>

		<!-- used by ConfigurationProperties -->
        <dependency>
        	<groupId>org.springframework.boot</groupId>
        	<artifactId>spring-boot-configuration-processor</artifactId>
        	<optional>true</optional>
        </dependency>

上面是pom    (我懒了,不想摘出来。说实话我们单一项目boot   依赖我都没动,手动加了个sqlserver数据库jar包,其他的都没改)

2.yml配置

spring:
  datasource:
   test1:
    jdbc-url: jdbc:mysql://192.168.0.150:3306/gdsdb?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
    username: root
    password: ***
    driver-class-name: com.mysql.cj.jdbc.Driver
   test2:
    jdbc-url: jdbc:sqlserver://192.168.0.150:1433;DatabaseName=gdsdb
    username: sa
    password: ***
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

我这里使用的是yml    不管是yml和另外一直格式都可以。格式不一样而已

介绍:  spring:datasource 就不讲了

 1.  test1   test2 是自定义名称,可以更换

 2.数据库路径 名称必须是 jdbc-url    不是这个会报错

 3. 类型 boot2.0以后 driver-class-name

3.启动类

 

//@EnableScheduling
//@SpringBootApplication(exclude={DataSourceAutoConfiguration.class},scanBasePackages = {"com.XXX.XXX","com.XXX.XXX","com.XXX.XXX"})
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
public class Gds2KApplication extends SpringBootServletInitializer {
	public static void main(String[] args) {
		SpringApplication.run(Gds2KApplication.class, args);
	}
	@Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Gds2KApplication.class);
    }
}

这里要说明一下@EnableScheduling 是定时器相关注解,但是下面有配置取消Boot自动配置    所以会有出入。因为我们目前项目中没用到定时器。所以暂时注掉了,我准备以后有需要再研究怎么开启。

@SpringBootApplication

  1. 有scanBasePackages 就注掉。  我这边原本同事加上了 。我测这个发现冲突。注释掉后测试好像没问题
  2. exclude={DataSourceAutoConfiguration.class} 要加上这句,作用是取消Boot自动配置。使用咱们自己配置的信息。
  3. @MapperScan(basePackages= 这个注解 删掉吧 。因为在那两个文件里面有加,这个位置就不用了。

4.自主配置 文件

在controller同级加个dataconfig(名字可更换)

把这两个文件直接粘进去(我附带文件里面有demo  可直接下载)   因为我是两个数据库。所以两个文件。如果配置多个数据库 可以多配置文件。里面内容是一样的。下面是需要修改的内容

讲解:

1.红框1的位置。是你数据库mapper包的路径

2.红框2的位置。是你yml文件配置的名称

3.里面有个依赖引错了。把上面import删了 再引个boot的就行。

 

到这里就完成了,可以启动尝试

遇到问题 再缕一缕文章 看看是哪里漏了。实在找不到错误留言给我

 

demo下载地址

 

 

 

有两个都遇到的问题  

Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required

Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured

 

可以看我这篇文章      文章链接

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你需要同时配置两个空间的Nebula数据源,并且还需要配置MySQL数据库,你可以按照以下步骤进行配置: 1. 在`application.yml`文件中定义两个数据源,分别对应两个Nebula空间和一个MySQL数据库: ```yaml spring: datasource: nebula1: url: jdbc:nebula:127.0.0.1:9669?space=space1 username: user password: password nebula2: url: jdbc:nebula:127.0.0.1:9669?space=space2 username: user password: password mysql: url: jdbc:mysql://localhost:3306/mydb username: user password: password ``` 2. 在代码中,你需要定义三个`DataSource` bean,分别对应两个Nebula数据源和一个MySQL数据源。你可以在`NebulaDataSourceConfig`类中定义这些bean: ```java @Configuration public class NebulaDataSourceConfig { @Bean(name = "nebula1DataSource") @ConfigurationProperties(prefix = "spring.datasource.nebula1") public DataSource nebula1DataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "nebula2DataSource") @ConfigurationProperties(prefix = "spring.datasource.nebula2") public DataSource nebula2DataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "mysqlDataSource") @ConfigurationProperties(prefix = "spring.datasource.mysql") public DataSource mysqlDataSource() { return DataSourceBuilder.create().build(); } } ``` 在上面的示例中,我们定义了三个`DataSource` bean,分别对应两个Nebula数据源和一个MySQL数据源。每个bean都使用了`@ConfigurationProperties`注解来读取配置文件中的属性。 3. 在代码中,你可以使用`@Qualifier`注解来指定使用哪个数据源。例如: ```java @Service public class MyService { @Autowired @Qualifier("nebula1DataSource") private DataSource nebula1DataSource; @Autowired @Qualifier("nebula2DataSource") private DataSource nebula2DataSource; @Autowired @Qualifier("mysqlDataSource") private DataSource mysqlDataSource; // ... } ``` 在上面的代码中,我们使用了`@Qualifier`注解来指定使用哪个数据源。在这里,我们使用了`nebula1DataSource`、`nebula2DataSource`和`mysqlDataSource`三个bean的名称来进行区分。 希望这个示例能够对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值