Spring Boot Web项目搭建

Spring Boot Web项目搭建

技术选型

  1. 核心框架:Spring Boot
  2. 模板引擎:Thymeleaf
  3. 数据库:MySQL
  4. 持久层框架:MyBatis,MyBatis-Plus
  5. 动态多数据源:Dynamic
  6. 数据库连接池:Druid
  7. 安全框架:Apache Shiro
  8. 缓存:Redis

新建项目

  1. 创建项目:File > New > Project > Spring Assistant > (Default)Next > WEB(或其他需要的配置)
    • 找不到Spring Assistant
      • 需安装插件
      • File > Setting > Plugins > Spring Assistant > Install > Restart Idea
    • 提示 times out连接超时
      • 可能是https://start.spring.io/网址访问不通导致
      • 检查网络连接,防火墙等问题后检查连接
      • File > Setting > Http Proxy > Check connection > (url) > ok
      • 检查结果成功后,再重新新建项目
    • Spring Boot的基础结构共三个文件:
      • src/main/java 程序开发以及主程序入口
      • src/main/resources 配置文件
      • src/test/java 测试程序
    • 若不需要可删除项目的 src 文件
  2. 创建子模块:项目右击 > New > Module > Spring Assistant > (Default)Next - WEB(或其他需要的配置)
    • 修改pom.xml配置文件,实现对父模块依赖的复用

开发配置

  1. 新建文件 application.yml
    # 开发环境配置
    server:
    	# 服务器的HTTP端口,默认为80
    	port: 9020
    	servlet:
    	# 应用的访问路径
    	context-path: /
    
  2. 引入lombok
    • 作用
      通过注释,消除模板代码,便捷的生成getter、setter、构造器、toString()、equals()等方法。
    • 添加依赖
      <dependency>
      	<groupId>org.projectlombok</groupId>
      	<artifactId>lombok</artifactId>
      	<version>${lombok.version}</version>
      </dependency>
      
    • 编写实体类,使用@Data注解
      • @Data : 自动生成set/get方法,toString方法,equals方法,hashCode方法,不带参数的构造方法
      • 注意:lombok 的注解不能被继承。
      • idea中使用时需要添加插件才能生效:
        File > Settings > Plugins > Browse repositories… > 输入lombok > Install
  3. 引入模板引擎
    • 作用
      • Spring boot 推荐使用来代替jsp
      • 是一款用于渲染XML/XHTML/HTML5内容的模板引擎
      • 特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用
    • 引入依赖
      <dependency>
      	<groupId>org.springframework.boot</groupId>
      	<artifactId>spring-boot-starter-thymeleaf</artifactId>
      	<version>${spring-boot-starter-thymeleaf.version}</version>
      </dependency>
      
    • 页面引入
      <html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
      
  4. 热部署
    • 参考Blog
      <!--热部署-->
      <dependency>
      	<groupId>org.springframework.boot</groupId>
      	<artifactId>spring-boot-devtools</artifactId>
      	<optional>true</optional>
      </dependency>
      <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <configuration>
              <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
          </configuration>
      </plugin> 
      
    • IDEA配置
      • File-Settings-Compiler-Build project automatically
      • ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running
  5. 配置数据库MySQL
    • 引入依赖
      <!--MySQL驱动包-->
      <dependency>
      	<groupId>mysql</groupId>
      	<artifactId>mysql-connector-java</artifactId>
      	<version>${mysql.version}</version>
      </dependency>
      
  6. 配置持久层框架 MyBatis
    • 引入MyBatis依赖
      <!--MyBatis 持久层框架-->
      <dependency>
      	<groupId>org.mybatis</groupId>
      	<artifactId>mybatis</artifactId>
      	<version>${mybatis.version}</version>
      </dependency>
      
      <dependency>
      	<groupId>org.mybatis.spring.boot</groupId>
      	<artifactId>mybatis-spring-boot-starter</artifactId>
      	<version>${mybatis-spring-boot-starter.version}</version>
      </dependency>
      
    • 引入MyBatis增强工具 Mybatis-plus 依赖
      <!--MyBatis-Plus MyBatis增强工具-->
      <dependency>
      	<groupId>com.baomidou</groupId>
      	<artifactId>mybatis-plus-boot-starter</artifactId>
      	<version>${mybatis-plus.version}</version>
      	<!--<exclusions>-->
      		<!--<exclusion>-->
      			<!--<groupId>org.springframework.boot</groupId>-->
      			<!--<artifactId>spring-boot-starter-jdbc</artifactId>-->
      		<!--</exclusion>-->
      	<!--</exclusions>-->
      </dependency>
      
      <dependency>
      	<groupId>com.baomidou</groupId>
      	<artifactId>mybatis-plus-annotation</artifactId>
      	<version>${mybatis-plus.version}</version>
      </dependency>
      
      <dependency>
      	<groupId>com.baomidou</groupId>
      	<artifactId>mybatis-plus-core</artifactId>
      	<version>${mybatis-plus.version}</version>
      </dependency>
      
  7. 整合动态多数据源 Dynamic
    • dynamic-datasource:一个基于springboot的快速集成多数据源的启动器
    • dynamic gitee地址
    • 引入依赖
      <!--动态多数据源-->
      <dependency>
      	<groupId>com.baomidou</groupId>
      	<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
      	<version>${dynamic-datasource-spring-boot-starter.version}</version>
      </dependency>
      
    • application.yml 配置数据源
      spring:
      	datasource:
      		dynamic:
      			primary: master #设置默认的数据源或者数据源组,默认值即为master
      			strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候回抛出异常,不启动会使用默认数据源.
      			datasource:
      				master:
        					url: jdbc:mysql://xx.xx.xx.xx:3306/dynamic
        					username: root
        					password: 123456
        					driver-class-name: com.mysql.jdbc.Driver
      				slave_1:
        					url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
        					username: root
        					password: 123456
        					driver-class-name: com.mysql.jdbc.Driver
      				slave_2:
        					url: ENC(xxxxx) # 内置加密,使用请查看详细文档
        					username: ENC(xxxxx)
        					password: ENC(xxxxx)
        					driver-class-name: com.mysql.jdbc.Driver
        					schema: db/schema.sql # 配置则生效,自动初始化表结构
        					data: db/data.sql # 配置则生效,自动初始化数据
        					continue-on-error: true # 默认true,初始化失败是否继续
        					separator: ";" # sql默认分号分隔符
      
    • 使用 @DS 切换数据源
      • @DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
      • 强烈建议只注解在service实现上
  8. 整合数据库连接池 Druid
    • Alibaba官方github
      参考blog
    • 引入依赖
      <!--Druid 数据库连接池-->
      <dependency>
      	<groupId>com.alibaba</groupId>
      	<artifactId>druid</artifactId>
      	<version>${druid-version}</version>
      </dependency>
      
    • application.yml 配置数据库连接池
      druid:
      	#连接池的设置
      	#初始化时建立物理连接的个数
      	initial-size: 5
      	#最小连接池数量
      	min-idle: 5
      	#最大连接池数量 maxIdle已经不再使用
      	max-active: 20
      	#获取连接时最大等待时间,单位毫秒
      	max-wait: 60000
      	#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      	test-while-idle: true
      	#既作为检测的间隔时间又作为testWhileIdel执行的依据
      	time-between-eviction-runs-millis: 60000
      	#销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
      	min-evictable-idle-time-millis: 30000
      	#用来检测连接是否有效的sql 必须是一个查询语句
      	#mysql中为 select 'x'
      	#oracle中为 select 1 from dual
      	validation-query: select 'x'
      	#申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      	test-on-borrow: false
      	#归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      	test-on-return: false
      	#当数据库抛出不可恢复的异常时,抛弃该连接
      	exception-sorter: true
      	#是否缓存preparedStatement,mysql5.5+建议开启
      	#pool-prepared-statements: true
      	#当值大于0时poolPreparedStatements会自动修改为true
      	max-pool-prepared-statement-per-connection-size: 20
      	#配置扩展插件
      	filters: stat,wall
      	#通过connectProperties属性来打开mergeSql功能;慢SQL记录
      	connection-properties:
        		stat:
          		mergeSql: true
          		slowSqlMillis: 500
      	#合并多个DruidDataSource的监控数据
      	use-global-data-source-stat: true
      	#设置访问druid监控页的账号和密码,默认没有
      	#stat-view-servlet.login-username: admin
      	#stat-view-servlet.login-password: admin
      
    • 修改tomcat url编码
      tomcat:
      	# tomcat的URI编码
      	uri-encoding: UTF-8
      	# tomcat最大线程数,默认为200
      	max-threads: 800
      	# Tomcat启动初始化的线程数,默认值25
      	min-spare-threads: 30
      
    • 修改启动文件
      • @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class) // 取消自动数据源自动配置
  9. 整合swager2
    • 引入依赖
      <!--swagger2-->
      <dependency>
      	<groupId>io.springfox</groupId>
      	<artifactId>springfox-swagger2</artifactId>
      	<version>${swagger2.version}</version>
      <!--<exclusions>
      		<exclusion>
      			<groupId>io.swagger</groupId>
      			<artifactId>swagger-annotations</artifactId>
      		</exclusion>
      		<exclusion>
      			<groupId>io.swagger</groupId>
      			<artifactId>swagger-models</artifactId>
      		</exclusion>
      	</exclusions>-->
      </dependency>
      
      <!-- springfox-swagger原生ui  -->
      <dependency>
      	<groupId>io.springfox</groupId>
      	<artifactId>springfox-swagger-ui</artifactId>
      	<version>${swagger2.version}</version>
      </dependency>
      
      <!--swagger-bootstrap-ui增强ui-->
      <dependency>
      	<groupId>com.github.xiaoymin</groupId>
      	<artifactId>swagger-bootstrap-ui</artifactId>
      	<version>${swagger-bootstrap-ui.version}</version>
      </dependency>
      
    • 新建swagger2配置文件
      /**
      * Swagger2的接口配置
      */
      @Configuration
      @EnableSwagger2
      public class SwaggerConfig
      {
      	/**
      	* 创建API
      	*/
      	@Bean
      	public Docket createRestApi()
      	{
      		return new Docket(DocumentationType.SWAGGER_2)
              // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
              .apiInfo(apiInfo())
              // 设置哪些接口暴露给Swagger展示
              .select()
              // 扫描所有有注解的api,用这种方式更灵活
              .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
              // 扫描指定包中的swagger注解
              //.apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
              // 扫描所有 .apis(RequestHandlerSelectors.any())
              .paths(PathSelectors.any())
              .build();
      	}
      
      	/**
      	* 添加摘要信息
      	*/
      	private ApiInfo apiInfo()
      	{
      		// 用ApiInfoBuilder进行定制
      		return new ApiInfoBuilder()
              				// 设置标题
              				.title("标题:若依管理系统_接口文档")
              				// 描述
              				.description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
              				// 作者信息
              				.contact(new Contact(Global.getName(), null, null))
              				// 版本
              				.version("版本号:" + Global.getVersion())
              				.build();
      	}
      }
      
    • 访问文档管理页面
      页面url:http://localhost:serverPort/doc.html
    • 常用注释
      • @Api(tags = " ") //注释类
      • @ApiOperation(value = " ") //注释方法
  10. 整合Apache Shiro
    • 引入依赖
      <!--Shiro核心框架 -->
      <dependency>
      	<groupId>org.apache.shiro</groupId>
      	<artifactId>shiro-core</artifactId>
      	<version>${shiro.version}</version>
      </dependency>
      
      <!-- Shiro使用Srping框架 -->
      <dependency>
      	<groupId>org.apache.shiro</groupId>
      	<artifactId>shiro-spring</artifactId>
      	<version>${shiro.version}</version>
      </dependency>
      

代码实现

  1. 实现基本数据查询
    1. 创建目录
      ├── java
      │   ├── system 
      │   │   ├── controller
      │   │   │   └── UserController.java  //系统用户控制器
      │   │   ├── dao
      │   │   │   └── UserDao.java		
      │   │   ├── pojo
      │   │   │   └── domain
      │   │   │   │   └── UserDO.java
      │   │   ├── service
      │   │   │   ├── impl
      │   │   │   │   ├── UserServiceImpl.java
      │   │   │   └── UserService.java
      ├── resources
      │   ├── mapper
      │   │   ├── system
      │   │   │   └── UserMapper.xml
      
    2. UserController.java
      @Controller
      @RequestMapping("/system/user")
      public class UserController{	 
      	@GetMapping("/list")
      	@ResponseBody
      	public List<UserDO> list(){
      		List<UserDO> list = userService.list();
      		return list;
      	 } 
      }
      
    3. UserService.java
      public interface UserService extends IService<UserDO> {
      }
      
    4. UserServiceImpl.java
      @Service("userService")
      public class UserServiceImpl extends ServiceImpl<UserDao, UserDO> implements UserService {
      }
      
    5. UserDO.java
      @TableName("sys_user")
      @Data
      public class UserDO implements Serializable { // Serializable对象序列化的接口
      private static final long serialVersionUID = 1L;
      // 自增ID
      @TableId(type = IdType.AUTO)
      }
      
    6. UserDao
      public interface UserDao extends BaseMapper<UserDO> {
      }
      
    7. UserMapper.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.mur.admin.system.Dao.UserDao">
       	<!-- 通用查询映射结果 -->
      	<resultMap id="BaseResultMap" type="com.mur.admin.system.pojo.domain.UserDO">
      		<id column="id" property="id" />
      		<result column="username" property="username"/>
      	</resultMap>
      </mapper>
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值