SpringCloud的JPA连接PostgreSql的教程


Posted in Java/Android onJune 26, 2021

项目目录结构

SpringCloud的JPA连接PostgreSql的教程

父build.gradle文件如下

spring-cloud-dependenciesspring-cloud-alibaba-dependencies 之间有版本对应关系的。 并不是可以随意搭配的。

具体版本对应关系参考:
版本关系

本想使用WebFlux模块的,奈何openfeign 不支持。

buildscript {
    ext {
        springBootVersion = '2.1.13.RELEASE'
        springBootManagementVersion = '1.0.8.RELEASE'
    }
    repositories {
        mavenLocal()
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        mavenCentral()
        maven { url 'https://repo.spring.io/snapshot' }
        maven { url 'https://repo.spring.io/milestone' }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("io.spring.gradle:dependency-management-plugin:${springBootManagementVersion}")
    }
}

subprojects {
    apply plugin: "idea"
    apply plugin: "java"
    
    apply plugin: 'org.springframework.boot'
    apply plugin: "io.spring.dependency-management"

    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11

    group "xyz.xiezc.mzix"
    version "1.0.0"

    repositories {
        mavenLocal()
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        mavenCentral()
        maven { url 'https://repo.spring.io/snapshot' }
        maven { url 'https://repo.spring.io/milestone' }
    }

    dependencies{
        compile group: 'cn.hutool', name: 'hutool-all', version: '5.6.6'
        compileOnly "org.projectlombok:lombok:1.18.20"

        compile 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config'
        compile 'com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery'

        compile 'org.springframework.boot:spring-boot-starter-actuator'
        compile 'org.springframework.boot:spring-boot-starter-aop'
        compile 'org.springframework.cloud:spring-cloud-starter-openfeign'

        annotationProcessor("org.projectlombok:lombok:1.18.20")
    }
    dependencyManagement {
        imports {
            mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Greenwich.SR6'
            mavenBom "com.alibaba.cloud:spring-cloud-alibaba-dependencies:2.1.4.RELEASE"
        }
    }
}

repositories {
    mavenLocal()
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    mavenCentral()
    maven { url 'https://repo.spring.io/snapshot' }
    maven { url 'https://repo.spring.io/milestone' }
}

Schedule模块引入JPA相关配置

:hibernate-types-52 和 commons-lang3 两个模块需要引入。 不然PSql的jsonb 等类型的字段无法使用

dependencies {

    implementation project(":common")

    compile('org.springframework.boot:spring-boot-starter-data-redis-reactive')
    compile('org.springframework.boot:spring-boot-starter-web')


    implementation group: 'org.postgresql', name: 'postgresql', version: '42.2.20'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

    implementation 'org.apache.commons:commons-lang3:3.12.0'
    implementation 'com.vladmihalcea:hibernate-types-52:2.10.3'

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}

对象的定义 基本 对象的定义:

json 类型的字段, 必须 @Type(type = “jsonb”) @Column(columnDefinition = “jsonb”) 同时定义。

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.vladmihalcea.hibernate.type.array.IntArrayType;
import com.vladmihalcea.hibernate.type.array.StringArrayType;
import com.vladmihalcea.hibernate.type.json.JsonBinaryType;
import com.vladmihalcea.hibernate.type.json.JsonNodeBinaryType;
import com.vladmihalcea.hibernate.type.json.JsonNodeStringType;
import com.vladmihalcea.hibernate.type.json.JsonStringType;
import lombok.Data;
import org.hibernate.annotations.*;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
import java.util.Map;
/**
 * 数据库一些特殊类型 序列化方式 定义在底层 基类中 
 */
@TypeDefs({
        @TypeDef(name = "string-array", typeClass = StringArrayType.class),
        @TypeDef(name = "int-array", typeClass = IntArrayType.class),
        @TypeDef(name = "json", typeClass = JsonStringType.class),
        @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class),
        @TypeDef(name = "jsonb-node", typeClass = JsonNodeBinaryType.class),
        @TypeDef(name = "json-node", typeClass = JsonNodeStringType.class),
})
@Data
@MappedSuperclass
public class BaseEntity {
    
    @Column
    @CreationTimestamp
    private LocalDateTime createTime;

    @Column
    @UpdateTimestamp
    private LocalDateTime updateTime;

    /**
     * 0: 是默认状态
     * -1: 是默认的删除状态
     */
    @Column
    private Integer status = 0;

    @Type(type = "jsonb")
    @Column(columnDefinition = "jsonb")
    private Map<String, Object> attribute;
}

表对象的定义:

Psql的schema 和 mysql的schema的略有不同。 @Table中必须指定schema

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.Type;

import javax.persistence.*;
import java.util.Map;

@Data
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "t_page", schema = "xiezc")
public class PageDO extends BaseEntity {

    /**
     * 页面的id
     */
    @Id
    @GeneratedValue
    Long id;

    @Column
    String code;

    @Column(unique = true)
    String url;

    @Column
    String contentType;

    @Type(type = "jsonb")
    @Column(columnDefinition = "jsonb")
    Map<String, Object> request;

    @Type(type = "jsonb")
    @Column(columnDefinition = "jsonb")
    Map<String, Object> response;
}

Repository 对象

@Repository
public interface PageRepository extends CrudRepository<PageDO, Integer> {

  List<PageDO> findByStatus(Integer status, Pageable pageable);

}

数据连接配置

## 数据库
spring.datasource.url=jdbc:postgresql://psotgres:5432/postgres
spring.datasource.username=xiezc
spring.datasource.password=1234567
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

数据库连接池等等

连接池等不用配置, 相关的包也可以不用引入, 默认使用的是 HikariPool 连接池。

后期 我句接入Druid 连接池,并配置完善的监控。

以上就是SpringCloud的JPA接入PostgreSql 教程的详细内容,更多关于SpringCloud接入PostgreSql 的资料请关注三水点靠木其它相关文章!

Java/Android 相关文章推荐
SpringAop日志找不到方法的处理
Jun 21 Java/Android
新手初学Java网络编程
Jul 07 Java/Android
SpringBoot快速入门详解
Jul 21 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
Aug 30 Java/Android
解析mybatis-plus中的resultMap简单使用
Nov 23 Java/Android
Java设计模式之享元模式示例详解
Mar 03 Java/Android
详解Flutter网络请求Dio库的使用及封装
Apr 14 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
Apr 24 Java/Android
JavaScript正则表达式实现注册信息校验功能
May 30 Java/Android
Mybatis-plus配置分页插件返回统一结果集
Jun 21 Java/Android
阿里面试Nacos配置中心交互模型是push还是pull原理解析
Jul 23 Java/Android
Springboot集成kafka高级应用实战分享
Aug 14 Java/Android
spring项目中切面及AOP的使用方法
Java 中的 Unsafe 魔法类的作用大全
Jun 26 #Java/Android
详解Java线程池是如何重复利用空闲线程的
Jun 26 #Java/Android
Spring Data JPA的Audit功能审计数据库的变更
Spring Boot 启动、停止、重启、状态脚本
详解Java分布式事务的 6 种解决方案
Jun 26 #Java/Android
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
You might like
php5 and xml示例
2006/11/22 PHP
php巧获服务器端信息
2006/12/06 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
php函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
浅析php变量修饰符static的使用
2013/06/28 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
JS实现六位字符密码输入器功能
2016/08/19 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
2016/11/28 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
JavaScript评论点赞功能的实现方法
2017/03/13 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
github配置使用指南
2014/11/18 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
django表单的Widgets使用详解
2019/07/22 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
护士进修自我鉴定
2014/02/07 职场文书
模范教师事迹材料
2014/02/10 职场文书
2014年科研工作总结
2014/12/03 职场文书