# 快速构建
接下来,我们来看下,如何快速简单的构建一个后端应用。
# 1. 使用idea创建新工程
打开你的IDEA,File > New > Project,新建一个SpringBoot项目
提示
Group
: 一律使用com.jfbrother
Artifact
: 请使用你的项目名,不要和旧项目名称重复
因为这是一个demo项目,所以这里使用demo
Java Version
: 一律使用java:8
其他项可以使用默认
提示
Maven依赖项,可以不选择,后续可直接在pom.xml
手动进行添加。
# 2. 项目构建
提示
如果右侧没有自动出现Maven标签卡,则在项目的pom.xml
文件上右键,选择Add as Maven Project
# 3. 添加Maven依赖
提示
parent
标签是V6基础库
的必须依赖。请注意版本号,如果新项目,如无特殊要求,建议使用最新版本。
最新版本号可在公司Git仓库
进行查看。
⭐️该URL
需要进行登录,如果你没有公司的Git账号
,请向你的上属领导咨询。
其余依赖和插件配置均可留空,如果需要自定义的依赖,可按照Maven规则继续添加
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.jfbrother</groupId>
<artifactId>parent</artifactId>
<version>4.1.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jfbrother</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<dependencies>
</dependencies>
</project>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 4. 添加配置文件
注意
为了统一风格,所有配置文件,一律采用yaml
文件进行管理。
禁止使用properties
文件(log4jdbc.log4j2.properties
较特殊,暂时无法采用yaml方式)
首先你要现将默认生成的配置文件进行删除
在相同目录下,手动创建以下通用配置文件
application.yml 主配置文件
server:
port: 8990
servlet:
session:
tracking-modes: cookie
cookie:
# 去掉url中的jsessionid,只允许cookie传输
http-only: true
max-http-header-size: 65546
spring:
profiles:
active: dev
include: logging,white-list,aj,knife4j,xxl,rabbit-mq
main:
allow-bean-definition-overriding: true
datasource:
druid:
validation-query: select 1
test-while-idle: true
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
type: com.alibaba.druid.pool.DruidDataSource
# 启用监控页面,10+版本要手动开启监控页面
stat-view-servlet:
enabled: true
# login-username: root
# login-password: jfbrother_2016
allow:
filters: config,stat,wall,slf4j,mergeStat
filter:
stat:
# 慢sql记录
slow-sql-millis: 5000
jpa:
show-sql: false
hibernate:
ddl-auto: update
properties:
hibernate:
# dialect: org.hibernate.dialect.Oracle10gDialect
dialect: org.hibernate.dialect.MySQL5Dialect
hibernate.format_sql: true
freemarker:
template-loader-path:
- classpath:/template
activiti:
check-process-definitions: false
servlet:
multipart:
enabled: true
max-file-size: 300MB
max-request-size: 300MB
application:
name: 共享加工平台
boot:
admin:
client:
url: http://springboot.jfbrother.com
instance:
prefer-ip: true
# 如果你不能自动获取局域网ip注册到springboot-admin,你可以这样主动设置
# service-base-url: http://ip:端口
data:
redis:
repositories:
# 用于解决redis提示【Could not safely identify store assignment for repository candidate interface】的问题
enabled: false
#设置欢迎页面(默认是swagger2文档首页)
welcome: doc.html
system:
api:
listAll:
max: 100
pageable:
default:
page: 0
size: 10
sort: createTime
password:
default: 123456
# 系统数据的公司id(暂时是固定的)
companyId: ff8080816cd213cd016cd23a68610000
file:
upload: ./temp
retrofit:
# 启用日志打印
enable-log: true
global-converter-factories:
- com.alibaba.fastjson.support.retrofit.Retrofit2ConverterFactory
enable-degrade: true
management:
endpoints:
web:
exposure:
include: ["*"]
cas:
server-url-prefix: http://cas.jfbrother.com/cas-jfsso
server-login-url: http://cas.jfbrother.com/cas-jfsso/login
client-host-url: http://localhost:${server.port}
validation-type: cas
authentication-url-patterns:
- /api/v1/system/cas
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
application-logging.yml 日志相关配置
# 日志设置
logging:
level:
# 在使用@ApiModelProperty注解在字段上时,
# 如果字段的类型为Long或是int类型,
# 那么程序启动后,访问swagger-ui.html的页面,程序会报错
# java.lang.NumberFormatException: For input string: ""
# 在swagger的官方文档中介绍是一个bug;可以忽略这个错误,如果看着不爽,可以调整日志的级别为error
io.swagger.models.parameters.AbstractSerializableParameter: error
org.hibernate.SQL: error
org.hibernate.type.descriptor.sql.BasicBinder: error
com.jfbrother: trace
com.jfbrother.baseserver.version.CustomRequestMappingHandlerMapping: error
# 配合log4jdbc使用
jdbc.connection: off
jdbc.resultset: off
jdbc.resultsettable: off
jdbc.audit: off
jdbc.sqlonly: off
# log4jdbc的sql详细,建议需要打开时,通过http://springboot.jfbrother.com,调整日志级别进行输出
jdbc.sqltiming: off
# 去除类似Generating unique operation named: getUsingGET_1的无用日志
springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator: off
# retrofit日志
com.github.lianjiatech.retrofit.spring.boot.interceptor.DefaultLoggingInterceptor: off
pattern:
console: "%clr(%d{yyyy/MM/dd-HH:mm:ss}){cyan} [%thread] %clr(%-5p)level %clr(%logger){magenta}- %msg%n"
file: "%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n"
file:
max-history: 7
max-size: 10MB
path: logs
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
application-white-list.yml 白名单配置
# 白名单设置
system:
white-list:
paths:
- /api/v1/system/login
- /api/v1/system/logout
- /api/v1/system/cas
- /api/v1/system/cas/**/token
- /api/v1/system/casCheck
- /api/v1/person/account/telephone_register_code
- /api/v1/person/account/telephone_register
- /api/v1/person/account/username_check
- /api/v1/person/account/default_login
- /api/v1/person/account/telephone_login_code
- /api/v1/person/account/telephone_login
2
3
4
5
6
7
8
9
10
11
12
13
14
15
application-knife4j.yml knife4j配置
# https://doc.xiaominfo.com/knife4j/documentation/enhance.html
knife4j:
enable: true
documents:
- group: 2.X版本
name: 接口签名
locations: classpath:sign/*
setting:
language: zh-CN
enableSwaggerModels: true
enableDocumentManage: true
swaggerModelName: 实体类列表
enableVersion: false
enableReloadCacheParameter: false
enableAfterScript: true
enableFilterMultipartApiMethodType: POST
enableFilterMultipartApis: false
enableRequestCache: true
enableHost: false
enableHostText: 192.168.0.193:8000
enableHomeCustom: true
homeCustomLocation: classpath:markdown/home.md
enableSearch: true
enableFooter: false
enableFooterCustom: true
footerCustomContent: "[浙江杰夫兄弟智慧科技有限公司](https://www.jfbrother.com) 浙ICP备:16044969号"
enableDynamicParameter: false
enableDebug: true
enableOpenApi: false
enableGroup: true
cors: false
production: false
basic:
enable: true
username: root
password: jfbrother_2016
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
application-aj.yml 行为验证码配置
aj:
captcha:
cache-type: redis
# local定时清除过期缓存(单位秒),设置为0代表不执行
timing-clear: 180
# local缓存的阈值,达到这个值,清除缓存
# cache-number: 1000
# 汉字统一使用Unicode,保证程序通过@value读取到是中文,可通过这个在线转换 https://tool.chinaz.com/tools/unicode.aspx 中文转Unicode
# 右下角水印文字(我的水印)
water-mark:
#右下角水印字体(宋体)
#water-font: 宋体
#点选文字验证码的文字字体(宋体)
#font-type: 宋体
#校验滑动拼图允许误差偏移量(默认5像素)
slip-offset: 5
#aes加密坐标开启或者禁用(true|false)
aes-status: true
#滑动干扰项(0/1/2) 1.2.2版本新增
interference-options: 2
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
application-xxl.yml 分布式定时任务配置
xxl:
enable: false
job:
admin:
addresses: http://xxl.jfbrother.com/xxl-job-admin
accessToken:
executor:
appname: kungu
address:
ip:
port:
logpath: ./logs/xxl
logretentiondays: 30
login:
username: admin
password: 123456
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
application-rabbit-mq.yml rabbitMQ配置
spring:
rabbitmq:
host: 192.168.1.116
port: 5672
username: gxjg
password: gxjg123
virtual-host: /gxjg
listener:
simple:
# 手动进行消息确认
acknowledge-mode: manual
# 消费者最小数量
concurrency: 3
# 消费者最大数量
max-concurrency: 10
2
3
4
5
6
7
8
9
10
11
12
13
14
15
log4jdbc.log4j2.properties log4jdbc
# If you use SLF4J. First, you need to tell log4jdbc-log4j2 that you want to use the SLF4J logger
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
继续创建以下3个默认环境配置文件
提示
db_name
,db_username
,db_password
请按照实际情况进行修改。
如果还没有对应项目的数据库,请向你的直属领导咨询。
- 注释掉的
druid.url
和druid.driver-class-name
,是最原始的配置(jpa的默认日志输出格式是?1,?2这类格式,sql和参数分离),当前采用的配置可以实现sql的详细打印(包括sql语句和参数)
建议在生产环境中关闭该功能,将两个注释进行反转即可。
application-dev.yml 开发环境配置类
spring:
datasource:
druid:
# url: jdbc:mysql://192.168.1.55:3306/{db_name}?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=GMT
url: jdbc:log4jdbc:mysql://192.168.1.55:3306/{db_name}?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=GMT
username: { db_username }
password: { db_password }
# driver-class-name: com.mysql.cj.jdbc.Driver
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
redis:
database: 2
host: 192.168.1.251
# host: 127.0.0.1
port: 6379
swagger:
enable: true
system:
filter:
sign:
enable: false
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
application-test.yml 测试环境配置类
spring:
datasource:
druid:
# url: jdbc:mysql://192.168.1.55:3306/{db_name}?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=GMT
url: jdbc:log4jdbc:mysql://192.168.1.55:3306/{db_name}?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=GMT
username: { db_username }
password: { db_password }
# driver-class-name: com.mysql.cj.jdbc.Driver
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
redis:
database: 2
host: 192.168.1.251
# host: 127.0.0.1
port: 6379
swagger:
enable: true
system:
filter:
sign:
enable: false
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
application-prod.yml 生产环境配置类
spring:
datasource:
druid:
# url: jdbc:mysql://192.168.1.55:3306/{db_name}?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=GMT
url: jdbc:log4jdbc:mysql://192.168.1.55:3306/{db_name}?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=GMT
username: { db_username }
password: { db_password }
# driver-class-name: com.mysql.cj.jdbc.Driver
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
redis:
database: 2
host: 192.168.1.251
# host: 127.0.0.1
port: 6379
swagger:
enable: false
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 5. 修改启动类
注意
EnableJpaAuditing
用于开启数据库的审计功能
排除扫描DataSourceAutoConfiguration
是为了防止循环引用错误
started
方法用于显示指定时区,防止生产环境时区错乱
这些注解,目前是必加的。但是也不排除后续基础包的升级,默认将这些配置打入包中的可能。
警告
注意修改所属包路径!启动类必须位于com.jfbrother
的根目录下,否则将无法扫描到基础包(com.jfbrother.baseserver
)内的配置类。
package com.jfbrother;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import javax.annotation.PostConstruct;
import java.util.TimeZone;
/**
* @author luosz
*/
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableJpaAuditing
@Slf4j
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
/**
* 显示指定时区,防止生产环境时区错乱
*/
@PostConstruct
void started() {
String id = "Asia/Shanghai";
log.info("显示指定服务器时区:{}", id);
TimeZone.setDefault(TimeZone.getTimeZone(id));
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 6. 删除默认生成的test测试类
提示
由于目前版本没有强制要求写测试类。
所以基础包没有默认引用Junit相关的包,如果你想写测试类,可以自己加入相关依赖。
如果不写测试类,则将默认生成的测试类进行删除即可
删除src/test/java
下的com.jfbrother.demo.DemoApplicationTests
# 7. 使用启动类进行项目的启动
正常情况,IDEA会在RUN/DEBUG Configuration
中自动生成启动配置,点击该配置的DEBUG模式可快速启动项目。
建议开发过程中一直保持DEBUG
模式启动,不要选择RUN
模式。