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

电子政务公开 网站建设装修网站免费设计

电子政务公开 网站建设,装修网站免费设计,网站建设实训报告意见和建议,网站建立的步骤是Spring Boot 提供了 Data JPA 的包#xff0c;允许你使用类似 ORM 的接口连接到 RDMS。它很容易使用和实现#xff0c;只需要在 pom.xml 中添加一个条目#xff08;如果使用的是 Maven#xff0c;Gradle 则是在 build.gradle 文件中#xff09;。 dependencies允许你使用类似 ORM 的接口连接到 RDMS。它很容易使用和实现只需要在 pom.xml 中添加一个条目如果使用的是 MavenGradle 则是在 build.gradle 文件中。 dependencies!-- Spring boot 依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependency dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependency /dependencies 在Main Spring Application类中添加 2 个注释 SpringBootApplication EnableJpaRepositories EnableAutoConfiguration public class SpringMainApplication {public static void main(String[] args) {SpringApplication.run(SpringMainApplication.class, args);} } 最后添加一个数据库连接包配置数据库连接即可实现与数据库通信。 接下来我们开始配置多数据源连接。 注意多个数据库应该具有相同的驱动程序。无法连接到不同的数据库如 MySql 和 Postgres SQL 数据库。数据库必须相同。此外数据库模式必须相同不同模式的 2 个数据库无法进行连接。 多数据源有哪些应用场景 1.支持具有相同模式的同一应用程序内的多租户。 2.动态模拟多个环境数据库上的行为 而不需要重新启动应用程序。 例如你可以动态连接到开发数据库或 QA 数据库而无需重新启动应用程序。 3.支持多个数据库来模拟各种自动化测试场景。不同数据库可能具有不同的配置和静态信息意味着你可以用一个自动化测试脚本覆盖多个测试用例。 4.在同一个应用程序中支持多个组织。根据用户登录可以动态决定他们的数据应进入哪个组织的数据库。 5.一次性为多个数据库插入数据。例如你有一个从脚本创建数据的批处理作业你可以一次性连接到多个数据库并对所有这些数据库运行脚本而无需指向不同的应用程序或重新启动服务器来执行此操作。 多数据源示意图如下 第一步添加 pom 依赖 dependencies!-- Spring boot dependencies --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Swagger dependencies --dependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger2/artifactIdversion2.9.2/version/dependencydependencygroupIdio.springfox/groupIdartifactIdspringfox-swagger-ui/artifactIdversion2.9.2/version/dependency!-- lombok dependency --dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.12/versionscopeprovided/scope/dependency!-- Database dependency --dependencygroupIdorg.postgresql/groupIdartifactIdpostgresql/artifactId/dependency!-- test dependencies --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scopeexclusionsexclusiongroupIdorg.junit.vintage/groupIdartifactIdjunit-vintage-engine/artifactId/exclusion/exclusions/dependency/dependenciesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-parent/artifactIdversion${spring-cloud-dependencies.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-gcp-dependencies/artifactIdversion${project.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/pluginplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactId/plugin/plugins/build 第二步添加数据库连接配置 app.datasource.db1.jdbc-urljdbc:postgresql://db1.com:5432/dbname1 app.datasource.db1.usernamepostgres app.datasource.db1.passwordpasswordapp.datasource.db2.jdbc-urljdbc:postgresql://db2.com:5432/dbname2 app.datasource.db2.usernamepostgres app.datasource.db2.passwordpasswordapp.datasource.db3.jdbc-urljdbc:postgresql://db3.com:5432/dbname3 app.datasource.db3.usernamepostgres app.datasource.db3.passwordpassword 这是 3 个独立的 PostgresSQL 实例具有相同的模式但具有不同的数据。 第三步添加多数据库配置。 首先在 Spring 应用程序主文件中添加注解 SpringBootApplication EnableJpaRepositories EnableAutoConfiguration public class MultidatabaseApplication {public static void main(String[] args) {SpringApplication.run(MultidatabaseApplication.class, args);} } 添加配置类 Configuration EnableTransactionManagement EnableJpaRepositories(entityManagerFactoryRef multiEntityManager,transactionManagerRef multiTransactionManager) EntityScan(com.sample.client.repositories.dto.entity) public class DatabaseConfiguration {//添加 JPA 实体路径private final String PACKAGE_SCAN com.sample.client.repositories.dto.entity;// 将db1设置为主数据库PrimaryBean(name db1DataSource)ConfigurationProperties(app.datasource.db1)public DataSource db1DataSource() {return DataSourceBuilder.create().type(HikariDataSource.class).build();}//db2连接数据源注入Bean(name db2DataSource)ConfigurationProperties(app.datasource.db2)public DataSource db2DataSource() {return DataSourceBuilder.create().type(HikariDataSource.class).build();}//db3连接数据源注入Bean(name db3DataSource)ConfigurationProperties(app.datasource.db3)public DataSource db3DataSource() {return DataSourceBuilder.create().type(HikariDataSource.class).build();}//多数据源配置Bean(name multiRoutingDataSource)public DataSource multiRoutingDataSource() {MapObject, Object targetDataSources new HashMap();targetDataSources.put(ClientNames.DB1, db1DataSource());targetDataSources.put(ClientNames.DB2, db2DataSource());targetDataSources.put(ClientNames.DB3, db3DataSource());MultiRoutingDataSource multiRoutingDataSource new MultiRoutingDataSource();multiRoutingDataSource.setDefaultTargetDataSource(db1DataSource());multiRoutingDataSource.setTargetDataSources(targetDataSources);return multiRoutingDataSource;}//多实体配置代码Bean(name multiEntityManager)public LocalContainerEntityManagerFactoryBean multiEntityManager() {LocalContainerEntityManagerFactoryBean em new LocalContainerEntityManagerFactoryBean();em.setDataSource(multiRoutingDataSource());em.setPackagesToScan(PACKAGE_SCAN);HibernateJpaVendorAdapter vendorAdapter new HibernateJpaVendorAdapter();em.setJpaVendorAdapter(vendorAdapter);em.setJpaProperties(hibernateProperties());return em;}Bean(name multiTransactionManager)public PlatformTransactionManager multiTransactionManager() {JpaTransactionManager transactionManager new JpaTransactionManager();transactionManager.setEntityManagerFactory(multiEntityManager().getObject());return transactionManager;}PrimaryBean(nameentityManagerFactory)public LocalSessionFactoryBean dbSessionFactory() {LocalSessionFactoryBean sessionFactoryBean new LocalSessionFactoryBean();sessionFactoryBean.setDataSource(multiRoutingDataSource());sessionFactoryBean.setPackagesToScan(PACKAGE_SCAN);sessionFactoryBean.setHibernateProperties(hibernateProperties());return sessionFactoryBean;}//添加 hibernate 属性private Properties hibernateProperties() {Properties properties new Properties();properties.put(hibernate.show_sql, true);properties.put(hibernate.format_sql, true);properties.put(hibernate.dialect, org.hibernate.dialect.PostgreSQLDialect);properties.put(hibernate.id.new_generator_mappings, false);properties.put(hibernate.jdbc.lob.non_contextual_creation, true);return properties;} } 这样就完成了我们的多数据库配置。 com.sample.client.repositories.dto.entity — 此目录包含 3 个数据库通用的 JPA 实体。 MultiRoutingDataSource类是我们的实际实现允许我们连接到多个数据库 接下来我们还需要一个DBContextHolder类来保存数据库引用并在运行时动态更改数据库。 public class DBContextHolder {private static final ThreadLocalClientNames contextHolder new ThreadLocal();public static void setCurrentDb(ClientNames dbType) {contextHolder.set(dbType);}public static ClientNames getCurrentDb() {return contextHolder.get();}public static void clear() {contextHolder.remove();} } ClientNames枚举类如下 public enum ClientNames {DB1, DB2, DB3 } 接下来我们需要对MultiRoutingDataSource进行重写 public class MultiRoutingDataSource extends AbstractRoutingDataSource {Overrideprotected Object determineCurrentLookupKey() {return DBContextHolder.getCurrentDb();} } determineCurrentLookupKey 方法用于决定应用程序应该动态连接到哪个数据库。 好了我们的配置就完成了。接下来我们测试下多数据源是否生效 RestController RequestMapping(/client) public class ClientDataController {Autowiredprivate ClientMasterService clientMasterService;GetMapping(/{clientdb})public String findFromDatabase(PathVariable String clientdbName) {return clientMasterService.getClientNames(clientdbName);} } ClientMasterService实现如下 Service public class ClientMasterService {Autowiredprivate ClientMasterRepository clientMasterRepository;public String getClientNames(String client) {switch (client) {case db1:DBContextHolder.setCurrentDb(ClientNames.DB1);break;case db2:DBContextHolder.setCurrentDb(ClientNames.DB2);break;case db3:DBContextHolder.setCurrentDb(ClientNames.DB3);break;}Entity1 e1 clientMasterRepository.findByEntity1Name(John Doe);if(e1 ! null) {return found in database: client with id e1.getId();}return found in client nada!;} } ClientMasterService使用DBContextHolder类根据从 Rest 端点传入的数据库名称db1、db2 或 db3设置要指向的数据库。 最后编写 JPA Repository 基础代码 Repository public interface ClientMasterRepository extends JpaRepositoryEntity1, String {Entity1 findByEntity1Name(String name); } Entity1 类如下 Entity Table(name entity1) Getter Setter public class Entity1 implements Serializable {IdColumn(name id, nullable false)private Integer id;Column(name entity1Name)private String entity1Name; } 这样就完成了整个多数据源的配置 总结 如果你有多租户需求或者多环境测试需求等可以自己尝试编写一个多数据源框架也可以引入第三方库来解决此需求。
http://www.sczhlp.com/news/171115/

相关文章:

  • 怎么样才能把网站关键词做有排名南宁seo团队费用是多少
  • 湖南郴州建设局网站哈尔滨建设工程
  • 2017年网站设计趋势内江规划建设教育培训中心网站
  • 网站开发与设计实训心得网站域名会赠送几个邮箱
  • 一般网站维护费用建设网站用什么语言编写
  • 凡科网站怎么做链接徐州网站开发多少钱
  • 网站建设swot分析俄罗斯引擎搜索
  • 企业营销网站怎样做机械订单加工网
  • 免费简历在线制作网站公司网站关键词优化怎么做
  • 三好街 网站建设祥云户网站
  • 坪地网站建设效果万网 网站建设方案书范文
  • 静安西安网站建设网站开发天津
  • 厦门长实建设有限公司网站无锡企业网站制作报价
  • wordpress定制企业站优设计网站
  • 国外工业产品设计网站做网站待遇
  • 门户网站建设必要性中铁建设集团有限公司什么级别
  • 淄博企业建网站网络规划设计师报考多少钱
  • discuz网站伪静态设置wordpress ie8 兼容
  • 网站开发的技术支撑 经验能力宁波公司网站建设价格
  • 网站开发合同甲方的权利开通的网站怎样安装
  • Educational Codeforces Round 183 (Rated for Div. 2)
  • 兰州市建设局官方网站增城做网站公司
  • 360免费建站怎么样上海培训机构排名榜
  • 帮人做淘宝网站骗钱网易企业邮箱可以全部转发么
  • 折扣券网站怎么做怎么提高网站的百度收录
  • 深圳市官网网站建设杭州网站建设公司导航
  • 精品课程 网站建设质量小程序推广怎么赚钱
  • wordpress自媒体模板哈尔滨网站关键字优化
  • 网站推广优势怎么制作网站视频播放器
  • 网易严选的网站建设网页设计图片大小单位