springboot基礎学習
34457 ワード
spring-bootの勉強
spring-bootは長い間出てきました。ずっと勉強する時間がありません。ちょうどこの時間はプロジェクトがそんなに忙しくなくて、記録を勉強します。
github:https://github.com/liangyt/springbootbase
この分岐は比較的基本的な構成集積である。
一.mybatis-spring-boot-starterとdruid
関連する依存パケットを導入する
mybatisの配置:この配置は簡単です。appication.propertiesファイルには2行の構成コードしかありません。
二.mybatis-generatorは主にデータベーステーブルからEntity、mapperとrepositoryの生成を便利にするために。
一つの依存
耐久層に関する処理は基本的にこれらです。
三.thymeleaf-layout-dialect
ビュー層はspring-bootが推奨するthymeleafを使用していますが、以前はsitemeshの使用に慣れていたので、ここではthymeleaf-layout-dialectの構成もsitemeshのような機能を使用しています。spring-boot-starter-thymeleaf依存性はすでにspring-layout-dialectを含んでいますので、繰り返し依存を追加しなくてもいいです。直接配置すればいいです。thymeleaf-layout-dialectという前に、まず一つの依存を追加してください。nekoです。この依存性を追加していない場合は、実行を説明してもいいですが、ラベルの解析はとても厳しいです。導入も簡単です。
spring-bootは長い間出てきました。ずっと勉強する時間がありません。ちょうどこの時間はプロジェクトがそんなに忙しくなくて、記録を勉強します。
github:https://github.com/liangyt/springbootbase
, 。
spring-boot-starter-thymeleaf , .
learn.01この分岐は比較的基本的な構成集積である。
一.mybatis-spring-boot-starterとdruid
関連する依存パケットを導入する
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>${mybatis.springboot.version}version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>${druid.version}version>
dependency>
spring-bootのデフォルトのプロファイルaplication.properties付属品mysqlとdruid関連のデータ#
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost/test?useUnicode=true&characterEncode=utf-8
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# druid
# 、 、
spring.druid.initial-size=5
spring.druid.min-idle=5
spring.druid.max-active=20
#
spring.druid.max-wait=60000
# , ,
spring.druid.time-between-eviction-run-millis=60000
# ,
spring.druid.min-evictable-idle-time-millis=30000
spring.druid.validation-query=select 1 from dual
spring.druid.test-while-idle=true
spring.druid.test-on-borrow=false
spring.druid.test-on-return=false
spring.druid.pool-prepared-statement-per-connection-size=20
# filters, sql ,'wall'
spring.druid.filters=stat,wall,log4j
# connectProperties mergeSql ; SQL
spring.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
druidを使うにはJAVAの配置の仕事をしなければなりません。具体的にはこのタイプを見てください。com.liangyt.config.db.DruidSource
中には二つの処理があります。dataSourceと事務を再処理します。もう一つの種類も注意してください。com.liangyt.config.db.DruidConfig
このクラスはdruid自身のservletに対する処理で、druidのクライアントインターフェースにアクセスしないと処理が不要だと感じています。mybatisの配置:この配置は簡単です。appication.propertiesファイルには2行の構成コードしかありません。
# mybatis
mybatis.type-aliases-package=com.liangyt.entity
mybatis.mapper-locations=classpath:mybatis/**/*.xml,classpath:mybatis/*.xml
mybatisは本体の経路とスキャンが必要なmapperファイルの位置を処理する必要があると教えてください。同様にspring-bootが起動する時はコメントを追加してください。@MapperScan(basePackages = "com.liangyt.repository")
mapperScanスキャンを開始します。二.mybatis-generatorは主にデータベーステーブルからEntity、mapperとrepositoryの生成を便利にするために。
一つの依存
<dependency>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-maven-pluginartifactId>
<version>${mybatis.generator.version}version>
dependency>
プラグイン
<plugin>
<groupId>org.mybatis.generatorgroupId>
<artifactId>mybatis-generator-maven-pluginartifactId>
<version>${mybatis.generator.version}version>
<configuration>
<configurationFile>src/main/resources/generator/generatorConfig.xmlconfigurationFile>
<overwrite>trueoverwrite>
<verbose>trueverbose>
configuration>
plugin>
このうち、mybatis-generatorの配置はファイル(src/main/resource/generator/generator/generator Config.xml)に詳しく説明されていますので、そのまま見てください。耐久層に関する処理は基本的にこれらです。
三.thymeleaf-layout-dialect
ビュー層はspring-bootが推奨するthymeleafを使用していますが、以前はsitemeshの使用に慣れていたので、ここではthymeleaf-layout-dialectの構成もsitemeshのような機能を使用しています。spring-boot-starter-thymeleaf依存性はすでにspring-layout-dialectを含んでいますので、繰り返し依存を追加しなくてもいいです。直接配置すればいいです。thymeleaf-layout-dialectという前に、まず一つの依存を追加してください。nekoです。この依存性を追加していない場合は、実行を説明してもいいですが、ラベルの解析はとても厳しいです。導入も簡単です。
<dependency>
<groupId>nekohtmlgroupId>
<artifactId>nekohtmlartifactId>
<version>1.9.6.2version>
dependency>
同時にappication.propertiesに配置を追加します。spring.thymeleaf.mode=LEGACYHTML5
thymeleaf-layout-dialectに戻ります。それを使う前に、まずLayout Dialectを配置してください。@Configuration
public class ThymeleafLayout{
@Bean
public LayoutDialect layoutDialect() {
return new LayoutDialect();
}
}
Bean LayoutDialectをセットして、それを使ってもいいです。ここでは簡単に二つのページを配置しています。
<html lang="en" xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout">
<head>
<meta charset="UTF-8" />
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title> title>
<link rel="stylesheet" th:href="@{css/element-ui.css}" />
<script th:src="@{js/vue.js}">script>
<script th:src="@{js/element-ui.js}">script>
<script th:src="@{js/axios.js}">script>
head>
<body>
test
<div layout:fragment="content">div>
body>
html>
注目点は主に二つあります。1.xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout" 2.
这个布局文件一般是留一个位置用于存放动态变化的内容,也就是layout:fragment="content"
这个Div的位置.
再来看看动态内容的文件:hello.html
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultrag.net.nz/thymeleaf/layout"
layout:decorator="layout/layout">
<head>
<title>Hellotitle>
<link rel="stylesheet" th:href="@{css/hello.css}">
<script th:src="@{js/hello.js}">script>
head>
<body>
<div layout:fragment="content">
<span th:text="${hello}">span>
div>
body>
html>
このファイルの内容はあまり注目されない点が三つあります。1.html
2.head
3.layout:fragment="content"
1.ラベルの定義は主にこのファイルが必要なのはどのレイアウトファイルですか?2.headタグの内容はレイアウトファイルのheadタグの内容の後に追加され、titleの内容はレイアウトファイルのtitleの内容を差し替えることができます。3.layout:fragment="content"
タグの内容はレイアウトファイルの
。
, 。
. thymeleaf
controller , model, , Controller :
@Controller
@RequestMapping(value = "/")
public class TestController {
@RequestMapping(value = "/hello")
public String hello(Model model) {
model.addAttribute("hello", " ");
return "hello";
}
}
Controller, :
WebMvcConfigurerAdapter
を り えることになります。カバー addViewControllers
:
/**
* , Controller
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("index").setViewName("/index");
super.addViewControllers(registry);
}
コードが アクセスできる /indexというパス、すなわちアクセス/resource/templates/index.ページです。 のページがあれば、 に の で すればいいです。また、 も えます。
.webブロック
スクリーンショットの はスプリングmvcと じで、org.springframework.web.servlet.HandlerInterceptor
を する があります。ここでは にコードを り けます。ご ください。@Component
public class TestControllerInterceptor implements HandlerInterceptor {
@Autowired
private TestService testService;
/**
* controller
* @param request
* @param response
* @param handler
* @return false controller true controller
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println(request.getRequestURI());
// if ("/api/test/all".equals(request.getRequestURI())) return false;
return true;
}
/**
* controller , , model
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
List list = testService.selectAll();
System.out.println(list);
}
/**
*
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
にこのブロックを するところで、 のxmlからjavaコードの に されています。これはControllerを して ページにアクセスしないように されています。 じクラスです。 きだけで の が されました。@Autowired
private TestControllerInterceptor testControllerInterceptor;
/**
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(testControllerInterceptor).addPathPatterns("/api/test/**");
super.addInterceptors(registry);
}
TestControllerInterceptor
の は@Autowired
によって されて される があり、new
によって されないことに されたい。
.hibernate validator
この は で する もありません。spring-book-starter-webの ではすでにこの があります。これを するには であり、エンティティクラスに を する は に において の を するとともに、@Autowired
クラスに Controller
を いてエンティティが する があると する がある。@RequestMapping(value = "/saveOrUpdate", method = RequestMethod.POST)
public Object saveOrUpdate(@RequestBody @Validated Test test) {
if (test.getId() != null) {
testService.update(test);
}
else {
test.setId((int)(Math.random() * 100));
testService.insert(test);
}
return MessageReturn.success(" ");
}
な い はネット の でも なくないです。ここに を り けます。
@Valid ,
@Null null
@NotNull null
@AssertTrue true
@AssertFalse false
@Min(value) ,
@Max(value) ,
@DecimalMin(value) ,
@DecimalMax(value) ,
@Size(max, min)
@Digits (integer, fraction) ,
@Past
@Future
@Pattern(value)
2. Hibernate Validator constraint
@Email
@Length(min=, max=)
@NotEmpty
@Range(min=, max=)
@NotBlank
@URL(protocol=, host=, port=, regexp=, flags=) url
@CreditCardNumber Luhn , , Luhn
@ScriptAssert(lang=, script=, alias=) Java Scripting API JSR 223 ("Scripting for the JavaTM Platform")
@SafeHtml(whitelistType=, additionalTags=) classpath jsoup
hibernate , 3 , 。
@NotNull @NotEmpty @NotBlank 3 :
@NotNull value null
@NotEmpty 0, , null
@NotBlank null, trim() length 0
@Validated
クラスでは、 のためのグローバルブロッキング を い、 りの を する。/**
* hibernate validator (BindException)
*
* @param ex
* @return
* {
* code: 0,
* message: " ",
* data: {
* name: " ",
* ...
* }
* }
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public Object validatorException(MethodArgumentNotValidException ex) {
List errors = ex.getBindingResult().getFieldErrors();
MessageReturn mr = MessageReturn.fail();
for (FieldError fe : errors) {
mr.add(fe.getField(), fe.getDefaultMessage());
}
return mr;
}
の はここまで しました。 わりました。
learn.02
ここからはブランチcom.liangyt.common.view.BaseController
に づいて される。
、ロゴバック
spring-bootのデフォルトのログプラグインはlogbackで、spring-book-starterの でデフォルトで しました。logback-classic
logback-core
slf4-api
jcl-over-slf4j
jul-to-slf4j
log4j-over-slf4j
spring-bootはログを するためのパラメータも していますが、 ファイルに して し が し です。この は のように されています。#
# ,spring boot ERROR,WARN,INFO; DEBUG debug=true;
debug=true
#
logging.pattern.console=%-4relative [%thread] %-5level %logger{35} - %msg %n
logging.pattern.file=%-4relative [%thread] %-5level %logger{35} - %msg %n
# ;root
logging.level.root=DEBUG
logging.level.com.liangyt=DEBUG
#logging.level.org.springframework.web=DEBUG
#
logging.path=logs
logging.file=log.log
が に くないなら、この もほぼ です。もちろんここでもログプロファイルを するパラメータを していますが、 したことがありません。logging.config=logconfig.xml
appication.propertiesを って する に、それはlogback.xmlファイルを します。logback.xmlのプロファイルの で しく しましたが、ここではもう り しません。ファイルを れば、 ラベルの が かります。 してみましたが、ログをmongodbに してみました。いい じです。 も です。 を :
<dependency>
<groupId>org.mongodbgroupId>
<artifactId>mongo-java-driverartifactId>
<version>3.4.2version>
dependency>
1つのクラスと のログの :mongodbの を し、ログをデータベースに するクラスは、class を して されます。
<appender name="MONGODB" class="com.liangyt.config.db.LogMongoDBAppender">
<DbHost>localhostDbHost>
<DbPort>27017DbPort>
<DbName>exappDbName>
<DbCollectionName>loggingDbCollectionName>
appender>
<logger name="com.liangyt" level="DEBUG">
<appender-ref ref="MONGODB" />
logger>
このようにすればlearn.01
が したログはこのクラスcom.liangyt
に み、 き com.liangyt.config.db.LogMongoDBAppender
がデータベースに される。
するログ をデータベースに したい は、このように できます。protected Logger mongodbLogger = LoggerFactory.getLogger("MONGODB");
mongodbLogger.info(" ");
、AOPを するappend
の にはすでにspring-boot-starter-thymeleaf
がありますが、spring-aop
に する つのパケットが りないだけですので、 の つの を する があります。
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjrtartifactId>
<version>${aspectj.version}version>
dependency>
<dependency>
<groupId>org.aspectjgroupId>
<artifactId>aspectjweaverartifactId>
<version>${aspectj.version}version>
dependency>
いいですただaopをやりたいなら、 つのプロジェクトを って、org.aspectj
を して、spring-book-starterを みます。spring-boot-starter-aop