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 相关文章推荐
IDEA使用SpringAssistant插件创建SpringCloud项目
Jun 23 Java/Android
利用Java设置Word文本框中的文字旋转方向的实现方法
Jun 28 Java/Android
logback 实现给变量指定默认值
Aug 30 Java/Android
Java基于Dijkstra算法实现校园导游程序
Mar 17 Java/Android
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
Mar 21 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
Java 多态分析
Apr 26 Java/Android
Springboot-cli 开发脚手架,权限认证,附demo演示
Apr 28 Java/Android
Jmerte 分布式压测及分布式压测配置
Apr 30 Java/Android
java版 联机五子棋游戏
May 04 Java/Android
SpringBoot详解整合Redis缓存方法
Jul 15 Java/Android
springboot+rabbitmq实现智能家居实例详解
Jul 23 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
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
JS简单判断函数是否存在的方法
2017/02/13 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
js实现简易计算器功能
2019/10/18 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
Python操作Word批量生成文章的方法
2015/07/28 Python
Python实现简单登录验证
2016/04/13 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
对Python函数设计规范详解
2019/07/19 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
美食节目策划方案
2014/05/31 职场文书
学习十八届四中全会依法治国心得体会
2014/11/03 职场文书
2015年党性分析材料
2014/12/19 职场文书
催款律师函范文
2015/05/27 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
Python 中的Sympy详细使用
2021/08/07 Python
Python turtle编写简单的球类小游戏
2022/03/31 Python