当前位置: 首页 > wzjs >正文

怎么看一个网站是谁做的国外设计模板网站

怎么看一个网站是谁做的,国外设计模板网站,网站新功能演示用什么技术做的,张店网站制作设计公司在实际开发中,有时需要连接多个数据库,例如,一个系统可能需要从不同的数据库中读取和写入数据。Spring 提供了多种方式来配置和管理多数据源,以下将介绍常见的配置和管理方法。 一、多数据源配置 在 Spring 中,可以通…

在这里插入图片描述

在实际开发中,有时需要连接多个数据库,例如,一个系统可能需要从不同的数据库中读取和写入数据。Spring 提供了多种方式来配置和管理多数据源,以下将介绍常见的配置和管理方法。

一、多数据源配置

在 Spring 中,可以通过配置多个数据源 Bean,并使用 @Qualifier 注解来区分它们。以下是一个基于 Spring Boot 的多数据源配置示例:

1. 添加依赖

在 Spring Boot 项目的 pom.xml 文件中添加 Spring Data JPA 和数据库驱动的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
2. 配置文件

application.properties 文件中配置多个数据库连接信息:

# 数据源 1 配置
spring.datasource.primary.url=jdbc:mysql://localhost:3306/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# 数据源 2 配置
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/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
3. 配置类

创建一个配置类,定义多个数据源 Bean:

import org.apache.commons.dbcp2.BasicDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;@Configuration
public class DataSourceConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource primaryDataSource() {return new BasicDataSource();}@Bean@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource secondaryDataSource() {return new BasicDataSource();}@Bean@Primarypublic LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(@Qualifier("primaryDataSource") DataSource dataSource) {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();em.setDataSource(dataSource);em.setPackagesToScan("com.example.primary");em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());em.setJpaProperties(jpaProperties());return em;}@Beanpublic LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(@Qualifier("secondaryDataSource") DataSource dataSource) {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();em.setDataSource(dataSource);em.setPackagesToScan("com.example.secondary");em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());em.setJpaProperties(jpaProperties());return em;}@Beanpublic JpaTransactionManager transactionManager1(@Qualifier("primaryEntityManagerFactory") LocalContainerEntityManagerFactoryBean entityManagerFactory) {JpaTransactionManager transactionManager = new JpaTransactionManager();transactionManager.setEntityManagerFactory(entityManagerFactory.getObject());return transactionManager;}@Beanpublic JpaTransactionManager transactionManager2(@Qualifier("secondaryEntityManagerFactory") LocalContainerEntityManagerFactoryBean entityManagerFactory) {JpaTransactionManager transactionManager = new JpaTransactionManager();transactionManager.setEntityManagerFactory(entityManagerFactory.getObject());return transactionManager;}private Map<String, String> jpaProperties() {Map<String, String> props = new HashMap<>();props.put("hibernate.hbm2ddl.auto", "update");props.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");props.put("hibernate.show_sql", "true");return props;}
}

二、多数据源的切换与使用

在实际的业务逻辑中,可以通过注入多个 EntityManagerDataSource,并使用 @Qualifier 注解来指定具体使用的数据源。

以下是一个简单的示例,演示如何在业务逻辑层切换使用不同的数据源:

import com.example.primary.domain.User;
import com.example.primary.repository.UserRepository;
import com.example.secondary.domain.Customer;
import com.example.secondary.repository.CustomerRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Autowiredprivate CustomerRepository customerRepository;@Transactional(transactionManager = "transactionManager1")public void saveUser(User user) {userRepository.save(user);}@Transactional(transactionManager = "transactionManager2")public void saveCustomer(Customer customer) {customerRepository.save(customer);}
}

三、动态数据源切换

在一些复杂的场景下,可能需要动态切换数据源。可以通过实现一个自定义的 AbstractRoutingDataSource 来动态切换数据源。

以下是一个简单的示例:

1. 创建动态数据源上下文
public class DataSourceContextHolder {private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();public static void setDataSource(String dataSource) {contextHolder.set(dataSource);}public static String getDataSource() {return contextHolder.get();}public static void clearDataSource() {contextHolder.remove();}
}
2. 创建动态数据源
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import javax.sql.DataSource;
import java.util.Map;public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return DataSourceContextHolder.getDataSource();}
}
3. 配置动态数据源
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternUtils;
import org.springframework.jdbc.datasource.init.DataSourceInitializer;
import org.springframework.jdbc.datasource.init.DatabasePopulator;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
import javax.sql.DataSource;
import java.io.IOException;@Configuration
public class DataSourceConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource primaryDataSource() throws IOException {return dataSource("primary");}@Bean@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource secondaryDataSource() throws IOException {return dataSource("secondary");}private DataSource dataSource(String schema) throws IOException {HikariDataSource dataSource = new HikariDataSource();dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/" + schema + "?useSSL=false&serverTimezone=UTC");dataSource.setUsername("root");dataSource.setPassword("password");dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setMaximumPoolSize(5);dataSource.setMinimumIdle(1);dataSource.setIdleTimeout(30000);dataSource.setConnectionTimeout(30000);dataSource.setMaxLifetime(600000);ResourcePatternResolver resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader);ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();resourceDatabasePopulator.addScript(resourcePatternResolver.getResource("classpath:schema.sql"));resourceDatabasePopulator.addScript(resourcePatternResolver.getResource("classpath:test-data.sql"));DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();dataSourceInitializer.setDataSource(dataSource);dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);dataSourceInitializer.setEnabled(true);dataSourceInitializer.afterPropertiesSet();return dataSource;}@Beanpublic DynamicDataSource dataSource(@Qualifier("primaryDataSource") DataSource primaryDataSource,@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {DynamicDataSource dynamicDataSource = new DynamicDataSource();Map<Object, Object> dataSourceMap = new HashMap<>();dataSourceMap.put("primary", primaryDataSource);dataSourceMap.put("secondary", secondaryDataSource);dynamicDataSource.setTargetDataSources(dataSourceMap);dynamicDataSource.setDefaultTargetDataSource(primaryDataSource);return dynamicDataSource;}
}

总结

Spring 提供了多种配置和管理多数据源的方式,可以根据项目的实际需求灵活选择。在需要切换数据源的场景下,可以通过配置多个数据源 Bean 并使用 @Qualifier 注解来指定具体使用的数据源。对于更复杂的动态数据源切换场景,可以自定义 AbstractRoutingDataSource 来实现动态切换。掌握多数据源的配置与管理,有助于构建更加灵活、高效的后端应用。

http://www.dtcms.com/wzjs/556028.html

相关文章:

  • 营销策划方案总结百度seo刷排名软件
  • 甲蛙网站建设电子商务网站建设与管理教案
  • 网站建设维护方向装修公司网站开发
  • 如何在路由器上做网站转跳google ads 推广
  • 公司网站建设的费用如何入账用中文模版可以做英文网站吗
  • 建立网站要什么条件和多少钱门户网站建设公司渠道
  • 网站管理系统制作软件下载南京网站设计公司兴田德润电话多少
  • 许昌旅游网站建设现状网页版设计
  • 买极速赛车网站会动手做不哪个在家做兼职网站比较好
  • 如何查找昆明公司的网站wordpress 登录 刷新
  • 网站建设 阿里云网站名字备案流程
  • 网站开发的项目开发房地产网站解决方案
  • 《网站平台建设》课程实训企业网站管理系统站长之家
  • 商城网站具体需求汕头企业自助建站
  • 注册新公司网上核名网站网站建设公司 网络服务
  • 网站页面效果图怎么做北京网络公司有哪些
  • 网站建设费用要分摊多长时间漂亮大气网站
  • 秦皇岛建设网站官网9377页游官网
  • 化妆品的网站建设深圳做网站公司有哪些企业
  • 个人建设网站教程订餐网站系统建设方案
  • 广西网站设计公司石家庄城乡建设厅网站
  • 做网站有兼职吗国家工商信息公示系统
  • 中海建筑建设有限公司网站建设网站怎样挣钱
  • 做外贸生意在哪个网站seo优化推荐
  • 做的网站有营销效果吗爱站工具包下载
  • 温州建网站公司哪家好做一个小程序要多少钱
  • 东营市住房和城乡建设管理局网站圣矢网络重庆网站建设优化推广公司
  • 网站可信度验证太原做网站公司运营
  • 南宁百度网站建设公司iis wordpress安装教程
  • 设计素材网站黄金烤肠做网站在哪里申请