V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Igotyouinmysight
V2EX  ›  分享发现

[Rainbond 最佳实践] Spring Boot 框架配置 MySQL

  •  
  •   Igotyouinmysight · 2018-01-10 17:42:37 +08:00 · 1672 次点击
    这是一个创建于 2298 天前的主题,其中的信息可能已经有所发展或是发生改变。

    [ Rainbond 最佳实践] Spring Boot 框架配置 MySQL

    Rainbond 开源软件介绍:
    Rainbond 是国内首个开源的生产级无服务器 PaaS。
    深度整合基于 Kubernetes 的容器管理、多类型 CI/CD 应用构建与交付、多数据中心的资源管理等技术,提供云原生应用全生命周期解决方案,构建应用与基础设施、应用之间及基础设施之间的互联互通生态体系。12 月 12 日,Rainbond 正式开源。
    
    [Rainbond 详细介绍]( http://www.rainbond.com/docs/stable/getting-started/design-concept.html)
    [Rainbond 项目地址]( https://github.com/goodrain/rainbond)
    

    Spring Boot 框架简化了新 Spring 应用的初始搭建以及开发过程,云帮支持平台部署 Spring Boot 类应用。

    云帮提供 Spring Boot 配置 MySQL 服务的示例,去云市一键式部署Spring Boot-MySQL 示例

    以下内容是本地创建和运行该示例的过程:

    创建示例

    使用 spring-boot-cli 创建示例

    $ docker run -it --rm \
    -v $PWD:/app goodrainapps/spring-boot-cli:1.5.9 spring init --dependencies=web spring-boot-mysql-demo
    

    进入示例类文件存放目录

    $ cd spring-boot-mysql-demo/src/main/java/com/example/springbootmysqldemo
    

    添加 DemoApplication.java

    @Controller
    @SpringBootApplication
    public class DemoApplication {
    
            @RequestMapping("/")
            @ResponseBody
            String home() {
                    return "Hello World!";
            }
    
            public static void main(String[] args) {
                    SpringApplication.run(DemoApplication.class, args);
            }
    }
    

    构建示例

    为了加快 maven 构建,在setting.xml中添加了国内的 mirror。将setting.xml拷贝到您的spring-boot-mysql-demo中。

    $ cd spring-boot-mysql-demo
    $ docker run -it --rm \
    -v "$PWD":/app/build \
    -w /app/build maven:3.5.2-jdk-7-alpine mvn -B -DskipTests=true -s settings.xml clean install
    

    运行

    执行以下命令运行Hello World 示例

    $ cd spring-boot-mysql-demo
    $ docker run -it --rm -v $PWD:/app -w /app -p 8080:8080  goodrainapps/openjdk:8u131-jre-alpine java  -jar target/*.jar
    

    访问http://localhost:8080查看运行结果。

    配置数据库

    云帮提供 Spring-boot-mysql-demo 的相关配置目录结构如下,配置文件内容仅供参考。

    详细配置参考下文:

    连接 MySQL

    添加以下内容,将此应用与数据库进行连接。

    pom.xml内添 mysql 数据库服务 :

    <dependency>
       <groupId>mysql</groupId>
       <artifactId>mysql-connector-java</artifactId>
       <version>5.1.9</version>
    </dependency>
    

    添加 JDBC 驱动:

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

    application.properties添加数据库连接信息:

    spring.datasource.url=jdbc:mysql://${MYSQL_HOST}:${MSYQL_PORT}/demo?createDatabaseIfNotExist=true
    spring.datasource.username=${MYSQL_USER}
    spring.datasource.password=${MYSQL_PASS}
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    spring.datasource.maxActive=10
    spring.datasource.maxIdle=5
    spring.datasource.minIdle=2
    spring.datasource.initialSize=5
    spring.datasource.removeAbandoned=true
    

    在源码添加DatabaseConfig.java

    @Configuration
    public class DatabaseConfig {
        @Bean
        @Primary
        @ConfigurationProperties(prefix = "spring.datasource")
        public DataSource dataSource() {
            return new org.apache.tomcat.jdbc.pool.DataSource();
        }
    }
    

    数据库初始化

    使用 JPA 管理生成实体的映射关系的代码。

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency
    

    数据库重构与迁移

    使用LiquiBase,以便将 JPA 生成实体的映射关系在数据库体现。第一步,在pom.xml添加:

    <dependency>
       <groupId>org.liquibase</groupId>
       <artifactId>liquibase-core</artifactId>
       <version>3.4.1</version>
    </dependency>
    

    第二步,创建 Liquibase 的修改日志,默认从 db.changelog-master.yaml 读取:

    databaseChangeLog:
      - changeSet:
          id: 1
          author: <your_name>
          changes:
            - createTable:
                tableName: person
                columns:
                  - column:
                      name: id
                      type: int
                      autoIncrement: true
                      constraints:						
                        primaryKey: true
                        nullable: false
                  - column:
                      name: first_name
                      type: varchar(255)
                      constraints:
                        nullable: false
                  - column:
                      name: last_name
                      type: varchar(255)
                      constraints:
                        nullable: false
    

    模板渲染

    Thymeleaf 可以帮助渲染XMLXHTMLHTML5内容的模板引擎,它也可以轻易的与Spring MVC等 Web 框架集成作为 Web 应用的模板引擎。在pom.xml中添加:

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    docker 化改造

    为了支持 Spring Boot MySQL demo 轻松部署在云帮,将 demo 使用 Dockerfile 构建镜像,在云帮实现一键式部署

    #使用配置好环境的父镜像
    FROM maven:3.5.2-jdk-7-alpine
    #创建 demo 源码工作目录
    RUN mkdir /app
    #将本地源码拷贝到镜像中
    COPY . /app/
    #指定工作目录
    WORKDIR /app
    #声明映射端口
    EXPOSE 5000
    #指定 maven 的配置文件,文件内制定新的 mirror 地址
    RUN mvn -B -DskipTests=true clean install
    #启动脚本
    ENTRYPOINT ["/app/run.sh"]
    

    构建镜像

    $ docker build -t goodrainapps/spring-boot-mysql-demo .
    

    运行

    #运行 mysql
    $ docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
    
    #运行示例
    $ docker run -it --rm --link mysql \
      -p 5000:5000 \
      -e MYSQL_HOST=mysql \
      -e MYSQL_PORT=3306 \
      -e MYSQL_USER=root \
      -e MYSQL_PASS=123456 \
      goodrainapps/spring-boot-mysql-demo
    

    访问http://localhost:5000查看 Spring Boot 框架配置 MySQL 服务的运行界面

    3 条回复    2018-03-03 10:55:21 +08:00
    idamien
        1
    idamien  
       2018-01-11 00:00:28 +08:00
    和 spring boot 官方上那个入门教程有什么区别 简介版 ?
    Igotyouinmysight
        2
    Igotyouinmysight  
    OP
       2018-01-12 09:35:42 +08:00
    @idamien 分享的最佳实践是场景化,利用 docker 容器技术运行的一个 demo
    jack80342
        3
    jack80342  
       2018-03-03 10:55:21 +08:00
    这几天翻译了 Spring Boot 最新的官方文档,欢迎 Fork,https://www.gitbook.com/book/jack80342/spring-boot/details
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   958 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:17 · PVG 04:17 · LAX 13:17 · JFK 16:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.