美文网首页
SpringBoot IDEA-Docker远程部署

SpringBoot IDEA-Docker远程部署

作者: 唯老 | 来源:发表于2019-09-20 21:33 被阅读0次

    前期准备工作

    1、版本说明

    • idea 2019
    • docker 19.03.1
    • ubunt 18

    2、安装docker 参照

    https://www.jianshu.com/nb/39832904
    

    3、配置docker远程连接端口

    # 登录远程服务器 修改 当前操作是ubuntu18
    vim /lib/systemd/system/docker.service
    # 修改ExecStart这行
    ExecStart=/usr/bin/dockerd  -H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock
    # 重新加载配置文件
    systemctl daemon-reload
    # 重启服务
    systemctl restart docker.service
    # 查看端口是否开启
    netstat -nlpt
    

    注: 如果是云服务器记得打开开启设置的端口

    4、 Idea安装插件

    image

    5、连接远程docker

    image

    6、docker图形界面

    image

    创建SpringBoot项目

    1、整体工程结构图

    image

    2、pom.xml

        <properties>
            <java.version>1.8</java.version>
            <mybatis-plus.starter.version>2.1.5</mybatis-plus.starter.version>
            <mybatis.starter.version>2.0.1</mybatis.starter.version>
            <druid.starter.version>1.1.20</druid.starter.version>
            <mybatis-plus.starter.version>3.2.0</mybatis-plus.starter.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.starter.version}</version>
            </dependency>
            <!--  添加MP依赖-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis-plus.starter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    

    3、application.yml

    spring:
      datasource:
        #    # 初始化线程池数量  最大数  最小数
        # 修改成你自己的ip地址
        url: jdbc:mysql://你自己的IP地址:3308/db_order?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
        # 驱动包 8.0以上的配置
        # =========== durid 连接池配置===========
        hikari:
          # 是客户端等待连接池连接的最大毫秒数
          connection-timeout: 30000
          # 是允许连接在连接池中空闲的最长时间
          minimum-idle: 10
          # 配置最大池大小
          maximum-pool-size: 65
          # 是允许连接在连接池中空闲的最长时间(以毫秒为单位)
          idle-timeout: 60000
          # 池中连接关闭后的最长生命周期(以毫秒为单位)
          max-lifetime: 600000
          # 配置从池返回的连接的默认自动提交行为。默认值为true。
          auto-commit: true
          # 连接池的名称
          pool-name: MyHikariCP
          leak-detection-threshold: 5000
    mybatis-plus:
      mapper-locations: classpath:/mappers/**/*.xml
      typeAliasesPackage: com.vp.docker.*.entity
      global-config:
        db-config:
          #主键类型
          id-type: auto
          #驼峰下划线转换
          table-underline: true
          logic-delete-value: 1
          logic-not-delete-value: 0
      configuration:
        #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
        map-underscore-to-camel-case: true
        cache-enabled: false
    server:
      port: 8080
      servlet:
        context-path: /api
    

    4、编写DockerDemoApplication

    @SpringBootApplication
    @MapperScan("com.vp.docker.mapper")
    public class DockerDemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(DockerDemoApplication.class, args);
        }
    }
    

    5、创建Entity

    @Data
    @TableName("t_discount")
    public class Discount {
        @TableId(type= IdType.AUTO)
        private Integer id;
        private BigDecimal discount;
        private String name;
    }
    

    6、创建DiscountMapper

    # 继承 Mytabis Plus的基类
    public interface DiscountMapper extends BaseMapper<Discount> {
    }
    

    7、创建OrderServiceImpl

    @Service
    public class OrderServiceImpl implements OrderService {
        @Resource
        DiscountMapper discountMapper;
        @Override
        public IPage<Discount> getDiscountList(int page, int size) throws Exception {
            IPage<Discount> pageDiscount = discountMapper.selectPage(new Page<>(page, size), null);
            return pageDiscount;
        }
    }
    

    8、创建OrderController

    @RestController
    @RequestMapping("/order")
    public class OrderController {
        @Resource
        OrderService orderService;
        @RequestMapping("/discounts/{page}/{size}")
        public IPage<Discount> discount(@PathVariable int page, @PathVariable int size) throws Exception {
            return orderService.getDiscountList(page, size);
        }
    }
    

    9、docker-compose.yml

    version: "3.7"
    services:
      app-db:
        container_name: db-order
        image: mysql:5.7.22
        volumes:
          - /opt/mysql/data:/var/lib/mysql
        ports:
          - "3308:3306"
        restart: always
        command:
          #  防止低版本的连接客服报错的问题
          --default-authentication-plugin=mysql_native_password
          # 设置数据库的编码
          --character-set-server=utf8mb4
          # 设置数据库默认的排序方式
          --collation-server=utf8mb4_general_ci
          # 解决低版本不允许时间字段 not null
          --explicit_defaults_for_timestamp=true
          # Linux  表名区分大小写   1 表示不区分大小写
          --lower_case_table_names=1
          # 如果报错 去掉该行,主要是解决5.7group by语法错误的情况
          --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
        environment:
          # 初始化数据库密码
          MYSQL_ROOT_PASSWORD: root
          # 初始化数据库的名字
          MYSQL_DATABASE: db_order
          # 时区
          TZ: Asia/Shanghai
      app:
        container_name: app-container
        build: .
        restart: always
        ports:
          - 9100:8080
        depends_on:
          - app-db
    

    10、Dockerfile

    官方镜像都是基于openjdk所以自己造了一个

    FROM ubuntu
    # java相关变量名
    # 根据你自己的版本修改成对应的
    ENV java jdk-8u221-linux-x64.tar.gz
    ENV jdk jdk1.8.0_221
    ADD   ./${java}    /usr/local/java/
    # 设置java环境
    ENV JAVA_HOME /usr/local/java/${jdk}
    ENV CLASSPATH $JAVA_HOME/lib;$JAVA_HOME/jre/lib
    ENV PATH $PATH:$JAVA_HOME/bin
    # 上级目录的target
    COPY ./target/*.jar app.jar
    # 启动容器的时候 启动tomcat
    ENTRYPOINT ["java","-jar","app.jar"]
    

    编辑配置

    image
    [图片上传失败...(image-66dc5-1568986386529)]
    image

    11、将springboot工程打包

    mvn install -Dmaven.test.skip=true
    

    **或者IDEA工具打包

    ** image

    12、点击运行

    image

    13、连接Docker容器的数据库导入数据

    -- ----------------------------
    -- Table structure for t_discount
    -- ----------------------------
    DROP TABLE IF EXISTS `t_discount`;
    CREATE TABLE `t_discount` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `discount` decimal(9,1) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
    -- ----------------------------
    -- Records of t_discount
    -- ----------------------------
    BEGIN;
    INSERT INTO `t_discount` VALUES (1, 9.5, '95折');
    INSERT INTO `t_discount` VALUES (2, 8.0, '8折');
    COMMIT;
    

    14、在浏览器输入

    image

    相关文章

      网友评论

          本文标题:SpringBoot IDEA-Docker远程部署

          本文链接:https://www.haomeiwen.com/subject/cqlhuctx.html