springboot项目数据库配置类DatabaseConfig实现代码

1:yml配置类

spring:
  datasource:
    name: text
    url: jdbc:mysql://192.168.11.50:3306/dsdd?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

这样启动项目,没有检查到是否连接数据库成功

2:数据库配置类(添加数据库检查)

package com.example.poi.utils;

/**
 * @Author xu
 * @create 2023/8/22 21
 */
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@Configuration
public class DatabaseConfig {

    @Value("${spring.datasource.url}")
    private String dataSourceUrl;

    @Value("${spring.datasource.username}")
    private String dataSourceUsername;

    @Value("${spring.datasource.password}")
    private String dataSourcePassword;

    @Value("${spring.datasource.driver-class-name}")
    private String dataSourceDriverClassName;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUrl(dataSourceUrl);
        dataSource.setUsername(dataSourceUsername);
        dataSource.setPassword(dataSourcePassword);
        dataSource.setDriverClassName(dataSourceDriverClassName);
        testConnection(dataSource); // 调用检查连接方法
        return dataSource;
    }

    private void testConnection(DataSource dataSource) {
        try (Connection connection = dataSource.getConnection()) {
            System.out.println("数据库连接正常!");
        } catch (SQLException e) {
            // 连接异常处理
            //e.printStackTrace();
            throw new RuntimeException("数据库连接异常!");
        }
    }
}

3:或者通过在启动类添加数据库检测

@SpringBootApplication
public class YourApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(YourApplication.class, args);

        // 检查数据库连接是否正常
        try {
            /** 获取DataSource bean,并调用getConnection()方法测试连接*/
            context.getBean(javax.sql.DataSource.class).getConnection();
            System.out.println("数据库连接正常!");
        } catch (Exception e) {
            System.err.println("数据库连接异常:" + e.getMessage());
            // 处理连接异常的逻辑
        }
    }
}
### Spring Boot数据库连接配置 在Spring Boot项目实现多个数据库连接涉及定义额外的数据源以及相应的实体管理器和事务管理器。以下是具体方法: 对于每个要使用的数据库,都需要声明独立的`DataSource` bean实例,并通过不同的前缀来区分这些bean名称及其相关联的属性设置。 #### 配置文件中的数据源设置 修改application.properties或application.yml以包含两个不同数据库的信息。这里展示基于properties格式的例子[^1]: ```properties # Primary Database Configuration spring.datasource.primary.url=jdbc:mysql://localhost/primarydb?useSSL=false&serverTimezone=UTC spring.datasource.primary.username=root spring.datasource.primary.password=password spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver # Secondary Database Configuration spring.datasource.secondary.url=jdbc:mysql://localhost/secondarydb?useSSL=false&serverTimezone=UTC spring.datasource.secondary.username=root spring.datasource.secondary.password=password spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver ``` #### Java Config类 创建一个新的Java配置类用于注册第二个(次要)数据源和其他必要的组件,如EntityManagerFactory和TransactionManager: ```java @Configuration public class DataSourceConfig { @Bean(name = "secondaryDataSource") @ConfigurationProperties(prefix="spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "secondaryEntityManagerFactory") public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("secondaryDataSource") DataSource dataSource){ HashMap<String, Object> properties = new HashMap<>(); properties.put("hibernate.hbm2ddl.auto", "update"); properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect"); return builder.dataSource(dataSource).packages("com.example.secondary").persistenceUnit("secondaryPersistenceUnit") .properties(properties) .build(); } @Bean(name = "secondaryTransactionManager") public PlatformTransactionManager transactionManager(@Qualifier("secondaryEntityManagerFactory") EntityManagerFactory factory) { return new JpaTransactionManager(factory); } } ``` 此代码片段展示了如何为次级数据库建立新的`DataSource`, `EntityManagerFactory` 和 `PlatformTransactionManager`. 同样地也需要为主数据库做类似的配置,只是通常默认情况下已经存在了主数据源的相关配置,在这种场景下只需要关注于添加辅助性的配置即可。 为了确保应用程序能够正确识别哪个持久化单元应该被用来处理特定的操作,可以在Repository接口上使用`@Transactional` 注解指明所期望的transaction manager. ```java @Repository @Transactional("secondaryTransactionManager") public interface SecondaryUserRepository extends JpaRepository<UserEntity, Long> {} ``` 上述操作使得开发者能够在同一个应用内同时访问多个关系型数据库,并且可以针对每一个单独设定其行为特性,比如方言、DDL自动生成策略等参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值