手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置

目录

一、关于三种环境

二、引入MySQL

1、准备数据

2.编写mapper和bean

3.准备service

4.单元测试

5.Controller

6.注解法配置MapperScan

7.项目本地测试

8.当前pom.xml

三、配置三种properties

1.设置项目对象模型pom.xml

2.配置maven打包命令

3.检查

四、总结

1.打包命令

2.当前架构

 3.参考文章

4.上一篇

 


一、关于三种环境

在日常开发中我们的代码一般都是需要在三种环境下运行的:

本地环境(dev):即开发环境

测试环境(qa):模拟生产环境用来测试

生产环境(pro):面向客户的程序运行环境

因为三种环境里的MySQL参数不同,我们每次在准备将本地代码打包上传的时候都需要先修改配置文件,有时候粗心大意忘记修改账户和密码,还有可能导致短时间的服务宕机,我们今天来试着配置一下,让maven打包的时候自动选择配置文件来打包。

在开始之前先在resources文件夹下(本身存在application.properties文件)另外创建application-dev.properties、application-qa.properties、application-pro.properties文件,在本文中,暂时将application.properties文件设置为

spring.profiles.active=dev

二、引入MySQL

1、准备数据

本应分别在三个不同的数据库中设置对应的数据,我们这里只测试本地数据库,所以只在本地创建了user表

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第1张图片

2.编写mapper和bean

这里使用mybatis.generator工具直接生成,关于generator的使用请自行查找

generatorConfiguration.xml





    
    

    

        
        
            
            
            
        

        
        
        

        
        
            
        

        
        
            
            
        

        
        
            
        

        
        
            
        


        
        
        

User.java

package cn.yzstu.baldwinblog.bean;

public class User {
    private Integer userId;

    private String userNick;

    private String userPassword;

    private String userName;

    private String userEmail;

    private String userDetail;

    private String userPhone;

    private String userOhter;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserNick() {
        return userNick;
    }

    public void setUserNick(String userNick) {
        this.userNick = userNick == null ? null : userNick.trim();
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword == null ? null : userPassword.trim();
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName == null ? null : userName.trim();
    }

    public String getUserEmail() {
        return userEmail;
    }

    public void setUserEmail(String userEmail) {
        this.userEmail = userEmail == null ? null : userEmail.trim();
    }

    public String getUserDetail() {
        return userDetail;
    }

    public void setUserDetail(String userDetail) {
        this.userDetail = userDetail == null ? null : userDetail.trim();
    }

    public String getUserPhone() {
        return userPhone;
    }

    public void setUserPhone(String userPhone) {
        this.userPhone = userPhone == null ? null : userPhone.trim();
    }

    public String getUserOhter() {
        return userOhter;
    }

    public void setUserOhter(String userOhter) {
        this.userOhter = userOhter == null ? null : userOhter.trim();
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userNick='" + userNick + '\'' +
                ", userPassword='" + userPassword + '\'' +
                ", userName='" + userName + '\'' +
                ", userEmail='" + userEmail + '\'' +
                ", userDetail='" + userDetail + '\'' +
                ", userPhone='" + userPhone + '\'' +
                ", userOhter='" + userOhter + '\'' +
                '}';
    }

 UserMapper.java

package cn.yzstu.baldwinblog.mapper;

import cn.yzstu.baldwinblog.bean.User;
import org.apache.ibatis.annotations.Mapper;

public interface UserMapper {
    int deleteById(Integer userId);

    int insert(User record);

    User selectById(Integer userId);

    int updateById(User record);
}

 UserMapper.xml




  
    
    
    
    
    
    
    
    
  
  
    user_id, user_nick, user_password, user_name, user_email, user_detail, user_phone, 
    user_ohter
  
  

  
    delete from all_user
    where user_id = #{userId,jdbcType=INTEGER}
  

  
    insert into all_user
    
      
        user_id,
      
      
        user_nick,
      
      
        user_password,
      
      
        user_name,
      
      
        user_email,
      
      
        user_detail,
      
      
        user_phone,
      
      
        user_ohter,
      
    
    
      
        #{userId,jdbcType=INTEGER},
      
      
        #{userNick,jdbcType=CHAR},
      
      
        #{userPassword,jdbcType=VARCHAR},
      
      
        #{userName,jdbcType=VARCHAR},
      
      
        #{userEmail,jdbcType=VARCHAR},
      
      
        #{userDetail,jdbcType=VARCHAR},
      
      
        #{userPhone,jdbcType=VARCHAR},
      
      
        #{userOhter,jdbcType=VARCHAR},
      
    
  

  
    update all_user
    
      
        user_nick = #{userNick,jdbcType=CHAR},
      
      
        user_password = #{userPassword,jdbcType=VARCHAR},
      
      
        user_name = #{userName,jdbcType=VARCHAR},
      
      
        user_email = #{userEmail,jdbcType=VARCHAR},
      
      
        user_detail = #{userDetail,jdbcType=VARCHAR},
      
      
        user_phone = #{userPhone,jdbcType=VARCHAR},
      
      
        user_ohter = #{userOhter,jdbcType=VARCHAR},
      
    
    where user_id = #{userId,jdbcType=INTEGER}
  

三个文件生成之后一般都要按照自己的需求来改一下,以上是经过我修改的文件

当然还需要配置一下扫描路径,代码写到这里的时候,我考虑了一下,将mapper.xml文件放在了转移到了src/main/resources/mybatis/mapper/下,并在src/main/resources/mybatis/下创建mybatis-config.xml文件留作备用,暂时为空

在application-dev.xml文件中配置数据库相关信息和映射文件相关信息

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/baldwin_blog?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC 
spring.datasource.username=root
spring.datasource.password=wy******

mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

3.准备service

接口:UserService.java

package cn.yzstu.baldwinblog.service;

import cn.yzstu.baldwinblog.bean.User;

/**
 * @描述
 * @Author Baldwin
 * @E-Mail [email protected] || baldwin@******.com
 * @Time 2019/12/11 20:52
 * @Other
 */
public interface UserService {
    User getbyId(int id);
}

 实现类:UserServiceImpl.java

package cn.yzstu.baldwinblog.service.impl;

import cn.yzstu.baldwinblog.bean.User;
import cn.yzstu.baldwinblog.mapper.UserMapper;
import cn.yzstu.baldwinblog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Baldwin
 * \* E_Mail: baldwin@******.com || [email protected]
 * \* Date: 2019/12/11
 * \* Time: 20:53
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User getbyId(int id) {
        return userMapper.selectById(Integer.valueOf(id));
    }
}

4.单元测试

将光标放在我们的类名上,然后点击Alt+Enter可以选择自动创建Test模块

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第2张图片

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第3张图片

选择我们熟悉的测试工具,配置自己需要的内容,然后点击OK

生成的测试类可以在test文件夹下找到,现在我们要给他加一些关于SB的测试参数,最终结果如下

package cn.yzstu.baldwinblog.mapper;

import cn.yzstu.baldwinblog.bean.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import static org.junit.Assert.*;

/**
 * @描述
 * @Author Baldwin
 * @E-Mail [email protected] || baldwin@******.com
 * @Time 2019/12/12 12:10
 * @Other
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;


    @Test
    public void selectById() {
        User user = userMapper.selectById(1);
        System.out.println("Baldwin是一个"+user.getUserDetail());
    }
}

点击运行,我们得到了一个预期之中,并且符合客观事实的结果(红框)

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第4张图片

5.Controller

新建UserController.java

package cn.yzstu.baldwinblog.controller;

import cn.yzstu.baldwinblog.bean.User;
import cn.yzstu.baldwinblog.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Baldwin
 * \* E_Mail: baldwin@******.com || [email protected]
 * \* Date: 2019/12/11
 * \* Time: 20:55
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
@RestController
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/login.action")
    String userLogin(){
        String str;
        User user = userService.getbyId(1);
        str = user.toString();
        return str;
    }
}

6.注解法配置MapperScan

在启动文件中增加注解@MapperScan("****"),让程序能够找到mapper.java文件的位置,也可以在每个mapper类的上方添加@Mapper注解,但是这样太麻烦了,我还是喜欢第一种方法。

package cn.yzstu.baldwinblog;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("cn.yzstu.baldwinblog.mapper")
public class BaldwinblogApplication {
    public static void main(String[] args) {
        SpringApplication.run(BaldwinblogApplication.class, args);
    }
}

 @MapperScan与@Mapper注解需要导入包mybatis-spring-boot-starter,而且需要指定版本,(2019-12-12:当前默认版本无法使用该注解)太高的版本可能导致注解失效


        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            
            1.2.0
        

7.项目本地测试

运行SB项目,并在浏览器中访问http://localhost:8080/user/login.action

到目前为止,我们已经成功在SB项目中引入MySQL。

8.当前pom.xml



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.2.2.RELEASE
         
    
    com.yzstu
    baldwinblog
    1.0.0
    jar
    baldwinblog
    This project is a new blog with SB and so on

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            
            1.2.0
        
        
            mysql
            mysql-connector-java
        
        
            org.springframework.boot
            spring-boot-devtools
            true
        
        
            org.xmlunit
            xmlunit-core
        
        
            junit
            junit
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            


            
            
                
                org.mybatis.generator
                mybatis-generator-maven-plugin
                1.3.2
                
                    
                    src/main/resources/generatorConfig.xml
                    true
                    true
                
                
                    
                        Generate MyBatis Artifacts
                        
                            generate
                        
                    
                
                
                    
                        org.mybatis.generator
                        mybatis-generator-core
                        1.3.2
                    
                
            
        
    


三、配置三种properties

我们在上面已经创建了三个properties,根据我们在application.properties中的配置

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第5张图片

 我们刚才测试运行的应该是application-dev.properties文件,这个我们从日志中可以得到验证

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第6张图片

不放心的话,我们还可以做一下测试,将我们的application.xml修改为

spring.profiles.active=qa

 但是现在我们的application-qa.xml其实在本地是无法运行的

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第7张图片

 我们来运行一下试试

通过日志我们发现,确实运行了qa的配置文件,但是我们的qa文件应该是无法运行的,我们现在来访问 http://localhost:8080/user/login.action

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第8张图片

果然出现了这个错误,这是因为我们的application-qa.xml文件中没有配置映射文件路径

那么我们现在来说一下如何让maven在打包的时候自动切换application.xml自动切换配置文件

1.设置项目对象模型pom.xml

添加profiles到pom.xml中,profiles节点是和build同级的。


        
            dev
            
                dev
            
            
                true
            
        
        
            qa
            
                qa
            
        
        
            prod
            
                prod
            
        
    

activation表示的是可以用这样的命令来触发profile,true表示dev是默认的profile, 这样本地直接ide启动项目的时候就是连接的dev环境。

添加filters节点。

 filters在build下一级

        
            src/main/resources/application-${env}.properties
        

 修改application.xml使配置生效

spring.profiles.active=@env@

@env@ 就相当于一个变量,与我们先前的配置对应即可

2.配置maven打包命令

clean package -P qa -D maven.test.skip=true   (clean并打包,跳过测试类)

 

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第9张图片

运行maven打包指令并检查文件

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第10张图片

3.检查

等待打包结束,检查target文件夹下的编译文件包

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第11张图片

可以看到,与我们设置的是一样的,成功

四、总结

1.打包命令

开发环境打包命令:clean package -P dec -D maven.test.skip=true

测试环境打包命令:clean package -P qa -D maven.test.skip=true

生产环境打包命令:clean package -P pro -D maven.test.skip=true

2.当前架构

手把手教你SpringBoot+Redis+MySQL搭建个人博客(二)-----引入MySQL数据库并实现通过properties实现多个数据库环境自动切换配置_第12张图片

 3.参考文章

纯洁的微笑:springboot(六)-如何优雅的使用mybatis

请叫我头头哥:SpringBoot入门教程(三)通过properties实现多个数据库环境自动切换配置

4.上一篇

从零开始,SpringBoot+Redis+MySQL搭建个人博客(一)-----搭建SpringBoot环境

5.下一篇

从零开始,SpringBoot+Redis+MySQL搭建个人博客(三)-----引入Redis

 

 

 

你可能感兴趣的:(SpringBoot)