springboot-baselin项目搭建过程

一.使用springboot快速搭建一个项目

此篇文章将给公司人员展示该如何建立一个springboot的标准项目,并且会标注出项目的结构以及需要注意的事项。

二.项目搭建前的软件准备和注意事项

1.软件准备

  1. jdk版本 1.8
  2. 开发工具 eclipse 版本2018-09
  3. maven 版本3.6.0(阿里云仓库)

2.注意事项

该注意事项适用于首次打开eclipse工作空间,或未配置过eclipse相关设置的情况,配置均为eclipse默认值。

  1. Window-Preferences-General-Content Types选项,将Text的Defaultencoding属性更改为UTF-8。
    在这里插入图片描述
  2. 注意,按照第1点修改之后,properties文件仍然是ISO-8859-1的编码格式,需要单独再修改成为UTF-8。
    在这里插入图片描述
  3. Window-Preferences-General-Workspace选项,将Text file encoding值修改为UTF-8(默认为GBK),New text file line delimiter值修改为UNIX(默认为Windows)。
    在这里插入图片描述完成配置的修改之后点击Apply And Close应用并关闭,项目搭建前的注意事项说明完毕,现在开始正式搭建springboot项目。

  1. 为了更好的兼容springboot项目,建议在eclipse商店中搜索安装Spring Tool 4插件(将使用安装了该插件的eclipse进行演示,具体安装方式不再赘述)。
  2. maven配置建议使用阿里云仓库,公司maven仓库的更新速度较慢并且jar包并不全面,可能会缺少springboot需要的jar包,因此推荐使用阿里云仓库。

三.新建项目

1.新建springboot项目

  1. 在项目栏空白处右键-New-Project,在跳出的对话框中输入spring,选择Spring Starter Project。
    在这里插入图片描述
  2. 点击Next,自行修改相应属性,Service URL选项保持为https://start.spring.io不要进行改动,需要注意的是Packging属性,该属性是决定项目编译出来是jar文件还是war文件,我这里选择的是jar,原因如下:
    ①.Packging为jar时,编译出来只有一个xxx.jar文件,单个jar文件的优势是不需要依赖任何第三方容器如Tomcat,仅仅需要同级别的javaSE环境即可运行,但是这样的缺陷是每次更新是需要整包更新的
    ②.Packging为war时,编译出来是xxx.war文件,也就是传统Tomcat使用的文件,需要依赖Tomcat容器和java环境才可运行。
    ③.以上是我使用springboot做项目时得出的结论,至于具体选择哪个,看你怎么进行选择了。
    在这里插入图片描述
  3. 选择好之后继续点击Next,选择要创建的springboot的版本,选择你需要集成的依赖,如mybatis和spring cloud组件等,按需选择,选择好之后点击Finish,eclipse会帮你开始初始化springboot项目,等待初始化完毕。
    在这里插入图片描述在这里插入图片描述
  4. 新建好之后,项目结构应该是这样的:
    在这里插入图片描述
  5. 其中,SpringbootBaselineApplication.java是项目启动的主类,application.properties是springboot的配置文件,pom文件源码如下,到此springboot项目搭建完成,可以直接运行了。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.0.BUILD-SNAPSHOT</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.ucmed</groupId>
	<artifactId>springboot-baseline</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<name>springboot-baseline</name>
	<description>卓健springboot-baseline示例项目</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

	<repositories>
		<repository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
		<pluginRepository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
		</pluginRepository>
	</pluginRepositories>

</project>

2.修改pom文件,添加自己需要的依赖

  1. 指定编码格式:
<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
	<java.version>1.8</java.version>
</properties>
  1. 添加dev-tools依赖(dev-tools是什么以及有什么用自行百度)
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<optional>true</optional>
</dependency>
  1. 移除tomcat依赖,新增undertow依赖(使用undertow容器的话,切记要将tomcat依赖给移除掉,不然仍然会以tomcat作为容器启动的,如果你需要使用tomcat作为容器,那你可以忽略这一条
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<!-- 从依赖信息里移除 Tomcat配置 -->
	<exclusions> 
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
  1. 其他的就是平时使用的类(例如数据库连接类),自行添加,建议做项目时遇到缺少的再添加,避免pom文件出现很多无用的依赖,导致项目臃肿。

3.添加logback日志输出

spring boot内部使用Commons Logging来记录日志,但也保留外部接口可以让一些日志框架来进行实现,例如Java Util Logging,Log4J2还有Logback。如果你想用某一种日志框架来进行实现的话,就必须先配置,默认情况下,spring boot使用Logback作为日志实现的框架。(我这也使用logback作为日志输出框架)

  1. springboot已经集成了logback,并且默认使用的就是此日志框架,因此不用额外添加依赖,直接将logback的配置文件放到resource目录下即可。logback-spring.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="/logs" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%line:行号,%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} Line:%line ----> %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
    <!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是demo.log -->
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
     	<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        	<level>INFO</level>
    	</filter>
    	<File>${user.home}/logs/defult.log</File>
        <!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
        <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${user.home}/logs/defult.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>90</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
           <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} Line:%line ---->  %msg%n</pattern> 
            <!-- 记录日志的编码:此处设置字符集 - -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--myibatis log configure-->
    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>

    <!-- 日志输出级别 -->
    <root level="INFO">
    	<!-- 输出控制台 -->
     	<appender-ref ref="STDOUT" />
     	<!-- 输出文件 -->
        <appender-ref ref="FILE" />
    </root>

</configuration>

4.修改springboot配置文件

springboot除了能够识别properties的配置文件之外,还能够识别一种后缀为yml的配置文件,两者的差别在于写法,实质上并没有不同,读取数据的方式也是一样,以下放出对比,自己选择需要使用的方式。
properties配置文件

server.port=16660
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.name: zsyy-yyzxyy
spring.datasource.url: jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL
spring.datasource.username: ucmed
spring.datasource.password: 123456
redis.host=127.0.0.1
redis.port=6379
redis.timeout=30000

yml配置文件

server:
  port: 16660

spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    name: zsyy-yyzxyy
    url: jdbc:mysql://127.0.0.1:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL
    username: ucmed
    password: 123456
  redis:
    host: 127.0.0.1
    port: 6379
    timeout: 30000
  1. 添加你需要添加的配置,如web监听端口,数据库连接配置等。
  2. 配置完成后,可以尝试启动一下项目,现在是可以正常运行了。
  3. 项目启动显示Undertow started on port(s) 16660 (http) with context path ''Started SpringbootBaselineApplication in 3.352 seconds (JVM running for 5.107)并且无错误抛出时,这说明项目正常启动了。在这里插入图片描述

5.建立完成后的项目结构

  1. 整个项目搭建完成后,项目结构如下:在这里插入图片描述
  2. pom文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.0.BUILD-SNAPSHOT</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.ucmed</groupId>
	<artifactId>springboot-baseline</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<name>springboot-baseline</name>
	<description>卓健springboot-baseline示例项目</description>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<!--指定main入口-->
		<start-class>com.ucmed.SpringbootBaselineApplication</start-class>
	</properties>

	<dependencies>
		<!-- springboot组件 -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!-- 从依赖信息里移除 Tomcat配置 -->
			<exclusions> 
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-tomcat</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-undertow</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
	<!-- 数据库依赖 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<scope>runtime</scope>
	</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

	<repositories>
		<repository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</pluginRepository>
		<pluginRepository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
		</pluginRepository>
	</pluginRepositories>

</project>

  1. application配置文件如下:
spring:
  profiles:
    active: zwjk
  1. application-zwjk配置文件如下:
server:
  port: 16660
  
spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    name: zsyy-yyzxyy
    url: jdbc:mysql://192.168.0.10:3306/springboot_baseline?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=CONVERT_TO_NULL
    username: ucmed
    password: csyz1573@mysql

  redis:
    host: 127.0.0.1
    port: 6379
    # 连接超时时间(毫秒)
    timeout: 30000

  thymeleaf:
    cache: false
    mode: HTML5
    characterEncoding: UTF-8
    servlet:
      content-type: text/html
    check-template: false
    check-template-location: false

6.注意事项

  1. application.yml文件中的active配置,用于标识启用哪套配置文件,规则如下:spring.profiles.active属性值为xxx,则启用配置名为application-xxx.yml的配置文件;例如spring.profiles.active属性值为zwjk,则启用application-zwjk.yml配置文件。
  2. 数据库配置中的spring.datasource.driverClassName属性值应该为com.mysql.cj.jdbc.Driver,而非com.mysql.jdbc.Driver;区别在于com.mysql.jdbc.Driver为mysql-connector-java 6.0以下版本使用,com.mysql.cj.jdbc.Driver为mysql-connector-java 6.0及以上版本使用,若mysql-connector-java 6.0版本为6.0以上但驱动仍使用com.mysql.jdbc.Driver,会出现报错提示Loading class 'com.mysql.jdbc.Driver'. This is deprecated. The new driver class is 'com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

四.项目内部结构,分包规则

未完待续

猜你喜欢

转载自blog.csdn.net/evenero/article/details/86549053
今日推荐