PostgreSQL Docker部署+SpringBoot集成方式

 更新时间:2024年12月16日 09:12:34   作者:爱写BUG的老冉  
本文介绍了如何在Docker中部署PostgreSQL和pgadmin,并通过SpringBoot集成PostgreSQL,主要步骤包括安装PostgreSQL和pgadmin,配置防火墙,创建数据库和表,以及在SpringBoot中配置数据源和实体类

背景

最近公司有新项目需要使用 PostgreSQL ,于是简单学习了一下,并记录一下过程。

安装PostgreSQL

拉取镜像

docker pull mdillon/postgis

启动容器

docker run --name postgis -e POSTGRES_PASSWORD=postgis -p 5432:5432 -d mdillon/postgis:latest

注:其中 POSTGRES_PASSWORD=postgis 设置了密码为 postgis

安装pgadmin4

pgadmin4可以理解为在线操作PostgreSQL的可视化网站,(也可以不安装这个,用DBeaver 或者 Navicat进行连接使用。

拉取镜像

docker pull dpage/pgadmin4

启动容器

docker run -d -p 5050:80 --name pgadmin4 -e PGADMIN_DEFAULT_EMAIL=admin -e PGADMIN_DEFAULT_PASSWORD=admin dpage/pgadmin4
  • PGADMIN_DEFAULT_EMAIL=admin是设置管理员账号为admin
  • PGADMIN_DEFAULT_PASSWORD=admin 是设置密码为 admin

防火墙放行端口

firewall-cmd --zone=public --add-port=5050/tcp --permanent

由于部分服务器的设置,防火墙对部分端口没有放开,这时外部通过端口访问的时候可能请求不到,所以需要放行端口。

页面操作

前面操作执行成功后,通过url:http://{ip}:5050/login 进行页面访问,可进入下面这个页面,输入账号密码,语言选择中文,点击登录即可。

进入页面后,选择添加服务器,然后输入我们数据库的相关信息即可添加成功


然后我们选择创建架构(其他地方也有翻译为模式),为后文测试做准备(作者这里创造的是名为test的架构)

然后在test下创建一张名为test1的表,该表只需要保护一个int类型的id字段即可

建表后任意添加一条数据

SpringBoot集成

作者这里使用的是各依赖版本如下:

  • SpringBoot: 2.3.7.RELEASE
  • postgresql: 42.2.23
  • lombok: 1.18.26
  • mybatis: 2.3.0
  • mybatis-plus: 3.4.3

pom依赖

	<properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.23</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>2.3.7.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.0</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>

    </dependencies>

application.yml

server:
  port: 9001

spring:
  datasource:
    driver-class-name: org.postgresql.Driver
    username: postgres
    password: postgis
    url: jdbc:postgresql://{ip}:5432/postgres?currentSchema=test

mybatis:
  mapper-locations: classpath:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

注:对于jdbc:postgresql://{ip}:5432/postgres?currentSchema=test这里,如果不填 currentSchema=test则默认走postgrespublic这个模式(也就是我们前文创建的架构),这里我们要走我们自己创建的test模式,所以这里需要把这个配置加上。

domain实体类

package com.ran.pgsql_code.domain;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName(value = "test1")
public class Test {
    private Long id;
}

注:这里的表名要和我们前文创建的表对应上。

mapper

package com.ran.pgsql_code.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ran.pgsql_code.domain.Test;

public interface TestMapper extends BaseMapper<Test> {

}

注:需要去application添加注解,这里要和我们的mapper创建的路径保持一致

@MapperScan("com.ran.pgsql_code.mapper")

代码调试

创建测试类,执行以下代码

package com.ran.pgsql_code;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ran.pgsql_code.mapper.TestMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.annotation.Resource;
import java.util.List;

@Slf4j
@SpringBootTest
class Tests {
    @Resource
    private TestMapper testMapper;

    @Test
    void queryForMybatisPlus(){
        QueryWrapper<com.ran.pgsql_code.domain.Test> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("id", 1L);
        List<com.rlz.pgsql_code.domain.Test> result = testMapper.selectList(queryWrapper);
        if (result == null){
            return;
        }
        for (com.rlz.pgsql_code.domain.Test test : result){
            System.out.println(test);
        }
    }

}

执行能成功查到,集成成功

总结

由于PostgreSQLMySQL的语法都是基于SQL来的,所以作者个人认为没必要重学一遍PostgreSQL的语法,基础的增删改查也可以通过mybatis来直接操作,等在实际应用中遇到了一些PostgreSQL的特殊化操作再去学习也是完全可以的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • IntelliJ IDEA : .java文件左下角显示

    IntelliJ IDEA : .java文件左下角显示"J"图标的问题

    IntelliJ IDEA : .java文件 左下角显示“J”,并且不能执行代码,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-10-10
  • Spring Boot应用开发初探与实例讲解

    Spring Boot应用开发初探与实例讲解

    这篇文章主要介绍了Spring Boot应用开发初探与实例讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java杂谈之重复代码是什么

    Java杂谈之重复代码是什么

    刚开始工作时,总有人开玩笑说,编程实际上就是 CV,调侃很多程序员写程序依靠的是复制粘贴。至今,很多初级甚至高级程序员写代码依旧是CV,就是把其他项目里的一段代码复制过来,稍加改动,然后,跑一下没有大问题就完事。这就是在给其他人挖坑
    2021-09-09
  • java算法题解Leetcode15三数之和实例

    java算法题解Leetcode15三数之和实例

    这篇文章主要为大家介绍了java算法题解Leetcode15三数之和实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • java ThreadLocal使用案例详解

    java ThreadLocal使用案例详解

    这篇文章主要为大家详细介绍了java ThreadLocal的使用案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Java均摊复杂度和防止复杂度的震荡原理分析

    Java均摊复杂度和防止复杂度的震荡原理分析

    这篇文章主要介绍了Java均摊复杂度和防止复杂度的震荡,结合实例形式分析了Java均摊复杂度和防止复杂度的震荡相关概念、原理、实现方法与注意事项,需要的朋友可以参考下
    2020-03-03
  • java实现异步回调返回给前端的方法示例

    java实现异步回调返回给前端的方法示例

    在Java中实现异步回调并将结果返回给前端,通常是在Web应用开发中处理耗时操作时所采用的技术手段,以避免阻塞HTTP请求线程并提高用户体验,本文就来介绍一下如何实现,感兴趣的可以了解一下
    2024-03-03
  • MyBatis执行SQL的两种方式小结

    MyBatis执行SQL的两种方式小结

    本文主要介绍了MyBatis执行SQL的两种方式小结,主要包括SqlSession 发送SQL和SqlSession获取Mapper接口,通过Mapper接口发送SQL,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • java 多线程的同步几种方法

    java 多线程的同步几种方法

    这篇文章主要介绍了java 多线程的同步几种方法的相关资料,这里提供5种方法,需要的朋友可以参考下
    2017-09-09
  • 在SpringBoot中配置日志级别和输出格式的教程详解

    在SpringBoot中配置日志级别和输出格式的教程详解

    在开发一个应用程序时,日志记录是非常重要的一环,SpringBoot提供了多种日志输出方式和配置选项,本文将介绍如何在SpringBoot应用程序中配置日志级别和输出格式,需要的朋友可以参考下
    2023-06-06

最新评论