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的特殊化操作再去学习也是完全可以的。

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

相关文章

  • java实现的xml格式化实现代码

    java实现的xml格式化实现代码

    这篇文章主要介绍了java实现的xml格式化实现代码,需要的朋友可以参考下
    2016-11-11
  • springboot 中 druid+jpa+MYSQL数据库配置过程

    springboot 中 druid+jpa+MYSQL数据库配置过程

    这篇文章主要介绍了springboot 中 druid+jpa+MYSQL数据库配置,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Spark Streaming编程初级实践详解

    Spark Streaming编程初级实践详解

    这篇文章主要为大家介绍了Spark Streaming编程初级实践详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • java比较两个list是否相同equals的代码详解

    java比较两个list是否相同equals的代码详解

    在本篇文章里小编给大家分享的是关于java比较两个list是否相同equals的代码详解,有需要的朋友们可以参考学习下。
    2020-02-02
  • Maven Settings.xml的基本语法详解

    Maven Settings.xml的基本语法详解

    这篇文章主要为大家介绍了Maven Settings.xml的基本语法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • SpringBoot整合Kaptcha实现图形验证码功能

    SpringBoot整合Kaptcha实现图形验证码功能

    这篇文章主要介绍了SpringBoot整合Kaptcha实现图形验证码功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • java中字符串与日期的转换实例

    java中字符串与日期的转换实例

    java中字符串与日期的转换实例,需要的朋友可以参考一下
    2013-05-05
  • Java 运算符详情

    Java 运算符详情

    这篇文章主要介绍了Java 运算符,Java 中的运算符与 C 语言基本一致。下面文章就围绕Java 中的运算符的相关资料展开内容,需要的朋友可以参考一下
    2021-11-11
  • Java设计模式系列之深入浅出单例模式

    Java设计模式系列之深入浅出单例模式

    设计模式是在大量的实践中总结和理论之后优选的代码结构,编程风格,以及解决问题的思考方式,下面这篇文章主要给大家介绍了关于Java设计模式系列之深入浅出单例模式的相关资料,需要的朋友可以参考下
    2021-09-09
  • 详解Spring加载Properties配置文件的四种方式

    详解Spring加载Properties配置文件的四种方式

    这篇文章主要介绍了详解Spring加载Properties配置文件的四种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05

最新评论