SpringBoot笔记

合集下载

SpringBoot中必须掌握的27个注解

SpringBoot中必须掌握的27个注解

SpringBoot中必须掌握的27个注解Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架,它不仅可以方便地创建生产级的Spring应用程序,还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringCloud集成。

而Spring Boot之所以能够轻松地实现应用的创建及与其他框架快速集成,最核心的原因就在于它极大地简化了项目的配置,最大化地实现了“约定大于配置”的原则。

然而基于Spring Boot虽然极大地方便了开发,但是也很容易让人“云里雾里”,特别是各种注解很容易让人“知其然而不知其所以然。

所以,要想用好Spring Boot就必须对其提供的各类功能注解有一个全面而清晰地认识和理解。

一方面可以提高基于Spring Boot的开发效率,另一方面也是面试中被问及框架原理时所必需要掌握的知识点。

在接下来的内容中,小编就带大家一起来探究下Spring Boot的一些常用注解吧!一、Spring相关6个基础注解Spring Boot的有些注解也需要与Spring的注解搭配使用,这里小编梳理了在项目中与Spring Boot注解配合最为紧密的6个Spring基础框架的注解。

如1、@Configuration从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

2、@ComponentScan做过web开发的同学一定都有用过@Controller,@Service,@Repository注解,查看其源码你会发现,他们中有一个共同的注解@Component,没错@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。

SpringBootActuator学习笔记

SpringBootActuator学习笔记

SpringBootActuator学习笔记spring boot ActuatorActuator概述Actuator指的是负责和移动装置的组件。

通过Actuator暴露的端点我们可以获取⼀个正在运⾏中的应⽤内部的状态导⼊依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>Actuator具备⼀些开箱即⽤的端⼝Endpoints id描述HTTP⽅法是否敏感信息auditevents显⽰当前应⽤程序的审计事件信息GET Yesbeans显⽰应⽤上下⽂中创建的所有Bean GET Yescaches显⽰可⽤缓存信息GET Yesconditions显⽰⾃动装配类的状态及及应⽤信息GET Yesconfigprops显⽰所有 @ConfigurationProperties 列表GET Yesenv显⽰ ConfigurableEnvironment 中的属性GET Yesflyway显⽰ Flyway 数据库迁移信息GET Yeshealth显⽰应⽤的健康信息(未认证只显⽰status,认证显⽰全部信息详情)GET Noinfo显⽰任意的应⽤信息(在资源⽂件写info.xxx即可)GET Noliquibase展⽰Liquibase 数据库迁移GET Yesmetrics提供应⽤运⾏状态的完整度量指标报告GET Yesmappings显⽰所有 @RequestMapping 路径集列表GET Yes scheduledtasks显⽰应⽤程序中的计划任务GET Yessessions允许从Spring会话⽀持的会话存储中检索和删除⽤户会话。

SpringBoot学习笔记

SpringBoot学习笔记

10分钟创建一个SB应用:1.创建项目2将springboot的版本改为1.5.6(不修改后面操作数据库会报类找不到)<version>1.5.6.RELEASE</version>3.pom.xml中配置3个数据库相关的内容4.在入口文件增加注解(不注解会导致mapper识别不到):@MapperScan("com.example.demo.mapper")5.创建generator/generatorConfig.xml文件,并修改数据库账号密码、包名、表名6.修改application.yml,增加数据源相关的配置7.创建一个maven的Run配置,设置mybatis-generator:generate -e8.编写Service接口和Service实现类9.编写Controller和方法10.启动应用创建项目https:///lom9357bye/article/details/69677120通过tomcat部署项目https:///PJH-Forever/p/8026330.htmlspring boot configuration annotation proessor not found in classpath引入如下依赖:<dependency><groupId> org.springframework.boot </groupId><artifactId> spring-boot-configuration-processor </artifactId><optional> true </optional></dependency>pom.xml中的parent只有parent设置了,后面的才不用写version;没有在parent中设置的,后面必须写version,否则只会下载一个unknown的错误包一些tips:spring boot 2.0相比1.5.x,变更比较大,一些类去除了,因此要注意不同版本的api如果在generatorConfig.xml中配置了某个表,但是没有用到,那么程序起来的时候会报错;删除即可Durid包含的主要功能:1)使用StaFilter插件进行监控数据库访问性能2)替换DBCP和C3P0,提供一个高效、可扩展的数据库连接池3)支持数据库密码的加密4)SQL执行日志5)提供了一个监控页面,可以查看sql情况控制器中通过@RequestBody获取POST参数报错:{"timestamp":1527154727083,"status":415,"error":"Unsupported Media Type","exception":"org.springframework.web.HttpMediaTypeNotSupportedException","message": "Content type 'application/json;charset=UTF-8' not supported","path":"/recomd/add"}经过排查,发现是参数中的类Recommend里面,有2个setIndexList()方法:setIndexList(List xxx);setIndexList(ArrayList xxx);删除一个就正常了,猜测是RequestBody在组装Recommend这个参数类的时候,无法判断该用哪一个set方法,从而报错了这应该算是框架的一个bug了Field userMapper in erServiceImpl required a bean of type 'erMapper' that could not be found.原因是在入口文件XxxApplication中,少加了一个注解:@MapperScan("com.zhouchangju.mapper")将项目启动方式从XxxApplication改为Artifact后,访问页面都是4041.没有将pom.xml里面的启动方式从jar改为war2.XxxApplication类没有继承自SpringBootServletInitializer类extends SpringBootServletInitializer安全插件配置url的时候,不用加artifactid比如项目叫做daily,我设置antMatchers的时候,不用加daily这一截:/**定义安全策略*/@Overrideprotected void configure(HttpSecurity http) throws Exception {//配置安全策略http.authorizeRequests()//定义/请求不需要验证.antMatchers("/","/**/*.css","/**/*.js","/**/*.jpg","/**/*.png","/**/*.jpeg","/user/getdynamicpassword","/user/login","/login.html").permitAll().anyRequest().authenticated()//其余的所有请求都需要验证.and().logout().permitAll()//定义logout不需要验证.and().formLogin()//使用form表单登录.loginPage("/login.html").failureUrl("/login?error=true");}本地开发时,Security验证的接口,总是报403需要在SecurityConfig中关闭csrf:.csrf().disable()Edit Configration时,没有Tomcat Serversettings->Build,Execution,Deploment->右侧ApplicationServer->添加本地tomcat信息误删了项目模块文件xxx.iml怎么办?可以在Project Structure里面的module里面,重新导入模块,注意每一步都是import,不是createKafkaConsumer is not safe for multi-threaded access配置文件中的属性无法加载: require a bean of type ng.String that could not be found 是因为写了一个带有String参数的构造函数导致的,删除构造函数即可解决,详见:https:///questions/40670099/im-not-including-the-java-lang-string-bean maven编译项目,报错:cannot find symbol原因是svn上面代码不全,缺少了一些文件如何修改打包后的war文件的存放位置?由于maven遵循“约定优先于配置”的思想,所以如果不做特殊配置,它默认是把打包之后产生的文件都放在target目录下的。

三十五个常见的Spring Boot知识点

三十五个常见的Spring Boot知识点

Spring Boot 是微服务中最好的Java 框架. 我们建议你能够成为一名Spring Boot 的专家。

本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力!问题一Spring Boot、Spring MVC 和Spring 有什么区别?1、SpringSpring最重要的特征是依赖注入。

所有SpringModules 不是依赖注入就是IOC 控制反转。

当我们恰当的使用DI 或者是IOC 的时候,我们可以开发松耦合应用。

松耦合应用的单元测试可以很容易的进行。

2、Spring MVCSpring MVC 提供了一种分离式的方法来开发Web 应用。

通过运用像DispatcherServelet,MoudlAndView 和ViewResolver 等一些简单的概念,开发Web 应用将会变的非常简单。

3、SpringBootSpring 和SpringMVC 的问题在于需要配置大量的参数。

Spring Boot 通过一个自动配置和启动的项来目解决这个问题。

为了更快的构建产品就绪应用程序,Spring Boot 提供了一些非功能性特征。

问题二什么是自动配置?Spring 和SpringMVC 的问题在于需要配置大量的参数。

我们能否带来更多的智能?当一个MVC JAR 添加到应用程序中的时候,我们能否自动配置一些beans?Spring 查看(CLASSPATH 上可用的框架)已存在的应用程序的配置。

在此基础上,Spring Boot 提供了配置应用程序和框架所需要的基本配置。

这就是自动配置。

问题三什么是Spring Boot Stater ?启动器是一套方便的依赖没描述符,它可以放在自己的程序中。

你可以一站式的获取你所需要的Spring 和相关技术,而不需要依赖描述符的通过示例代码搜索和复制黏贴的负载。

例如,如果你想使用Sping 和JPA 访问数据库,只需要你的项目包含spring-boot-starter-data-jpa 依赖项,你就可以完美进行。

SpringBoot踩坑笔记二:SpringBoot整合redis报Noqualifyin。。。

SpringBoot踩坑笔记二:SpringBoot整合redis报Noqualifyin。。。

SpringBoot踩坑笔记⼆:SpringBoot整合redis报Noqualifyin。

今天在学习Spring Boot整合redis的过程中遇到个问题,在使⽤@Autowiredprivate RedisTemplate<String, Object> redisTemplate;注⼊时,启动项⽬会报异常org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.bh.redis.RedisTest': Unsatisfied dependency expressed through field 'redisTemplate'; nested exception is org.springframework.beans.facto at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:586) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1341) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:393) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:118) ~[spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83) ~[spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:44) ~[spring-boot-test-autoconfigure-2.0.5.RELEASE.jar:2.0. at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246) ~[spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.12.jar:4.12]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) [junit-4.12.jar:4.12]at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) [junit-4.12.jar:4.12]at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) [junit-4.12.jar:4.12]at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) [junit-4.12.jar:4.12]at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) [junit-4.12.jar:4.12]at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.junit.runners.ParentRunner.run(ParentRunner.java:363) [junit-4.12.jar:4.12]at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) [spring-test-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89) [.cp/:na]at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41) [.cp/:na]at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541) [.cp/:na]at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763) [.cp/:na]at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463) [.cp/:na]at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209) [.cp/:na]Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.redis.core.RedisTemplate<ng.String, ng.Object>' available: expected at least 1 bean which qualifi at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1506) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1101) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1062) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:583) ~[spring-beans-5.0.9.RELEASE.jar:5.0.9.RELEASE]... 29 common frames omitted这么⼀⼤串看的是不是有点懵,其实咱们看⼀句可以了No qualifying bean of type 'org.springframework.data.redis.core.RedisTemplate<ng.String, ng.Object>' available:⼤致意思是没有与RedisTemplate<String, Object>匹配的bean解决⽅法1、不指定泛型,如@Autowiredprivate RedisTemplate redisTemplate;2、使⽤@Resource注解代替@Autowired,如@Resourceprivate RedisTemplate<String, Object> redisTemplate;。

SpringBoot 笔记整理

SpringBoot 笔记整理

Spring Boot资料整理 (2)第一节Spring Boot之Hello World (2)1.1 Spring Boot介绍 (2)1.2 Spring Boot特性 (2)1.3 Hello Spring Boot 编写 (3)第二节Spring Boot 核心 (4)2.1 入口类和@SpringBootApplication (4)2.2 关闭SpringBoot自动配置 (4)2.3 全局配置文件 (5)2.4 Starter pom (6)2.5 Xml 配置文件 (6)2.6 日志 (6)第三节Spring Boot 自动配置的原理(了解) (7)3.5.1 Maven下载源码 (7)3.5.2 源码分析 (7)3.5.3 SpringBoot 条件注解 (8)第四节SpringBoot Web 开发 (9)4.1 自动配置静态资源 (9)4.2 自定义消息转化器 (11)4.3 自定义SpringMVC的配置(重点) (12)4.4 SpringBoot 使用FastJson (13)4.5 读取外部资源文件 (14)4.6 Spring Boot JPA / Hibernate / Spring Data概念 (15)4.7 Spring Boot JPA-Hibernate 使用 (16)4.8 Spring Data JPA介绍 (16)4.9 SpringBoot JdbcTemplate 使用 (17)4.10 SpringBoot 全局异常捕捉 (18)4.11 SpringBoot 添加JSP支持 (19)第五节SpringBoot 整合其他框架.............................................................. 错误!未定义书签。

Spring Boot资料整理第一节Spring Boot之Hello World回顾Spring的发展:Spring1.x 时代:都是通过xml文件配置bean,随着项目的扩大,配置Xml过于繁琐; Spring2.x时代:JDK1.5带来了注解的支持,此时可以使用注解对Bean进行声明注入; Spring3.x到Spring4.x :使用Java配置方式可以更好的理解你配置的Bean;并且Spring4.x和Spring boot都推荐使用java配置的方式,可完全替代Xml@Configuration和@BeanSpring的Java配置方式是通过@Configuration 和@Bean 这两个注解实现的:1、@Configuration 作用于类上,相当于一个xml配置文件;2、@Bean 作用于方法上,相当于xml配置中的<bean>;1.1 Spring Boot介绍Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。

SpringBoot学习资料.doc

SpringBoot学习资料.doc

SpringBoot一、 Spring介绍1.1 、 SpringBoot 简介在您第 1 次接触和学习 Spring 框架的时候,是否因为其繁杂的配置而退却了?在你第n 次使用 Spring 框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot 来让你更易上手,更简单快捷地构建 Spring 应用!Spring Boot 让我们的 Spring 应用变的更轻量化。

比如:你可以仅仅依靠一个Java 类来运行一个 Spring 引用。

你也可以打包你的应用为jar 并通过使用 java -jar 来运行你的 Spring Web 应用。

Spring Boot 的主要优点:为所有 Spring 开发者更快的入门开箱即用,提供各种默认配置来简化项目配置内嵌式容器简化 Web项目没有冗余代码生成和XML配置的要求本章主要目标完成Spring Boot 基础项目的构建,并且实现一个简单的Http 请求处理,通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。

1.2 、系统要求:Java 7 及以上Spring Framework 4.1.5 本文采用 Java 1.8.0_73及以上、 Spring Boot 1.3.2 调试通过。

二、快速入门2.1 、创建一个Maven 工程名为” springboot-helloworld” 类型为Jar工程项目2.2 、 pom文件引入依赖<parent ><groupId >org.springframework.boot</ groupId ><artifactId>spring-boot-starter-parent</ artifactId<version >1.3.3.RELEASE </ version ></ parent ><dependencies ><! — SpringBoot web组件--><dependency ><groupId >org.springframework.boot</ groupId ><artifactId>spring-boot-starter-web</ artifactId </ dependency ></ dependencies > > >spring-boot-starter-parent 作用在 pom.xml 中引入 spring-boot-start-parent,spring官方的解释叫什么stater poms,它可以提供也就是说依赖管理,引入以后在申明其它dependency 的时候就不需要version了,后面可以看到。

详解Spring Boot实现日志记录 SLF4J

详解Spring Boot实现日志记录 SLF4J

在开发中打印内容,使用System.out.println() 和Log4j 应当是人人皆知的方法了。

其实在开发中我们不建议使用System.out 因为大量的使用System.out 会增加资源的消耗。

而Log4j 更为灵活在性能上也相比System.out 要高,我们可以配置输出级别,可以指定多个日志文件分别记录不同的日志。

使用System.out 是在当前线程执行的,写入文件也是写入完毕后才继续执行下面的程序。

而使用Log工具不但可以控制日志是否输出,怎么输出,它的处理机制也是通知写日志,继续执行后面的代码不必等日志写完。

如非必要,建议大家不要使用控制台输出,因为控制台输出没有优先级会显得输出太乱。

个人推荐使用SLF4J(Simple Logging Facade For Java)的logback来输出日志,其比log4j 要好,因为他效率更高。

spring Boot 提供了一套日志系统,logback是最优先的选择。

配置了logback.xml可以利用Spring Boot提供的默认日志配置:详解Spring Boot实现日志记录SLF4J。

springboot使用乱记

springboot使用乱记

springboot使用乱记springboot运行的三种方式1.直接运行main2.打成jar包,使用java -jar命令运行3.spring-boot:run方法运行Springboot热部署依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional><!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖该项目的项目如果想要使用devtools,需要重新引入 --></dependency>SpringBoot重启是reload重启,通过监控classpath的变化,如果classpath中的文件发生变化,即触发重启。

springboot通过两个classpath来完成reload,一个basic classloader中加载不变的类,一个restart classloader中加载classpath中的类,重启的时候,restart classloader中的类丢弃并重新加载;排除资源:spring.devtools.restart.exclude=static/**,templates/**spring.devtools.restart.additional-exclude=public/** (处理默认配置排除之外的) spring.devtools.restart.enabled=false (禁用自动重启)idea实现devtools热部署需要配置两步 :1、CTRL + SHIFT + A --> 查找make project automatically --> 选中2、CTRL + SHIFT + A --> 查找Registry --> 找到并勾选compiler.automake.allow.when.app.runningSpringBoot中的参数设置①springboot中主要的参数来源及优先级:1,命令行参数;2,ServletConfig和ServletContext;3,操作系统环境变量;4,application-{profile}.properties或者YAML文件; 5,application.properties或者YAML文件;②springboot提供了方便的properties绑定机制1)默认从application.properties中加载配置;app :myname : "leo"2)配置值:③@ConfigurationProperties:两种绑定方式:1,直接在类上绑定2.在bean标签后面绑定参数绑定标签:可以非常方便的把资源文件中的内容绑定到对象上资源文件:bean:@Getter@Setter@ConfigurationProperties(prefix = "app.config")@Componentpublic class User {private String myname;private Integer age;private Integer money;}静态资源1,默认情况下,Springboot会从classpath下的/static、/public、/resources、/META-INF/resources下加载静态资源;2,可以通过修改spring.resources.staticLocations来修改静态资源加载地址;3,因为应用是打成jar包,所以之前的src/main/webapp不会加载;。

springboot学习(六)springboot各版本中使用log4j2记录日志

springboot学习(六)springboot各版本中使用log4j2记录日志

springboot学习(六)springboot各版本中使⽤log4j2记录⽇志spring boot 各版本中使⽤ log4j2 记录⽇志前⾔Spring Boot中默认⽇志⼯具是logback,只不过我不太喜欢logback。

为了更好⽀持 spring boot 框架,我使⽤log4j。

spring boot 各版本与 log4j 的⽀持情况1. spring boot 1.2.X 版本spring boot 1.2.X版本⼀般建议使⽤默认⽇志⼯具(logback),也可以使⽤ log4j。

但,注意的是:Spring Boot 1.2.4.RELEASE包含⼀个bug,。

所以,当你通过application.properties定义⽇志级别时,该错误会更改⽗记录器级别,在最差情况下会更改根记录器级别。

虽然这个bug是修复在1.2.6.RELEASE,我建议⾄少使⽤1.2.8.RELEASE(如果你想坚持1.2.x)。

因为 spring boot 现在仍然在快速发展阶段,版本更新较快,有时候就会因为版本问题⽽出现各种奇奇怪怪的bug。

2. spring boot 1.3.X 版本spring boot 从 1.3.X 版本开始⽀持slf4j+log4j/log4j2。

* ⾸先,先解决为什么使⽤ SL4J Facade?对于这个问题,⽹上已经有许多精彩地点答案了,我就直接附上其中⼀篇的地址了:。

同时,附上⼀张⼯作流程图:然后,就是在⾃⼰的 springboot 项⽬中使⽤ log4j。

补充⼀下,由于⽅法⼀样,我将slf4j+log4j2放到了1.4.X版本中来应⽤。

1.创建⼀个1.3.X版本的 spring boot 项⽬(记得排除logback-classic的依赖)。

12 3 4 5 6 7 8 9 10<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId> </exclusion></exclusions></dependency>2.引⼊ SL4J 依赖。

springboot日志配置(超详细)

springboot日志配置(超详细)

Spring Boot 日志配置(超详细)Spring Boot 日志配置(超详细)Spring Boot 日志配置超详细默认日志Logback :默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。

在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了。

从上图可以看到,日志输出内容元素具体如下:时间日期:精确到毫秒日志级别:ERROR, WARN, INFO, DEBUG or TRACE进程ID分隔符:—标识实际日志的开始线程名:方括号括起来(可能会截断控制台输出)Logger 名:通常使用源代码的类名日志内容添加日志依赖假如maven依赖中添加了spring-boot-starter-logging :&lt;dependency&gt;&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;&lt;artifactId&gt;spring-boot-starter-logging&lt;/artifactId&gt ;&lt;/dependency&gt;但是呢,实际开发中我们不需要直接添加该依赖。

你会发现spring-boot-starter 其中包含了spring-boot-starter-logging ,该依赖内容就是Spring Boot 默认的日志框架logback 。

工程中有用到了Thymeleaf ,而Thymeleaf 依赖包含了spring-boot-starter ,最终我只要引入Thymeleaf 即可。

&lt;dependency&gt;&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;&lt;artifactId&gt;spring-boot-starter-thymeleaf&lt;/artifactId &gt;&lt;/dependency&gt;控制台输出日志级别从低到高分为:TRACE &lt; DEBUG &lt; INFO &lt; WARN &lt; ERROR &lt; FATAL 。

JavaSpringBoot如何使用IdentityServer4作为验证服务器学习笔记

JavaSpringBoot如何使用IdentityServer4作为验证服务器学习笔记
System.out.println("\nSending 'POST' request to URL : " + introspectEndpoint); System.out.println("Post parameters : " + post.getEntity()); System.out.println("Response Code : " +
上面的 ApiNameSecretbase64 的功能是读取配置中的信息,返回编码好的 Api Name 和 Secret, 下面是我application.properties相关的配 置,同样这些配置需要放到IdentityServer那边,可以是通过内存的方式也可以是通过像我一样使用 UI管理界面直接添加:
JavaSpringBoot如何使用 IdentityServer4作为验证服务器学习笔 记
这边记录下如何使用IdentityServer4 作为 Java SpringBoot 的 认证服务器和令牌颁发服务器。本人也是新手,所以理解不足的地方请多多指教。另外由于真的 很久没有写中文了,用词不太恰当的地方也欢迎新手大佬小伙伴指出,一起进步。另外这边令牌的获取需要手动使用postman根据令牌端点获取,然后放在请求 头里面通过postman发给Java的demo,本身这个demo没有取令牌的功能,请各位注意。
#IdentityServer4 配置文件参数 = Api1 api.secret=secreta
由于没有客户端,这边用postman代替求取token,使用http://x.x.x.x:5000/connect/token,然后给我们的java程序发起请求。

springboot知识点总结

springboot知识点总结

springboot知识点总结⼀、springboot总结1、概述springboot是⼀种快速使⽤spring框架的简便⽅式,springboot简单来说相当于⼀个程序搭建的脚⼿架,最⼤的作⽤就是能够帮助我们快速构建项⽬,并且尽可能的减少xml的配置⽂件,让程序的开发更加的简单,开箱即⽤,快速上⼿,让我们在程序开发的过程中能狗将更多的精⼒去关注到程序的业务逻辑,⽽并⾮是配置⽂件,总之,我为springboot总结了三个字,概括:轻(易配置,易通⽤,启动时间段),快,简2、为什么要⽤springboot因为在之前Java开发有⼀个特别⼤的痛点就是配置特别臃肿和⿇烦,有时候当你在幸幸苦苦搭环境的时候,可能python程序员早已经将代码敲完了(年轻⼈不讲武德),主要就是原因就是以下两条:1、复杂的配置项⽬中的各种配置其实是开发时的⼀个损耗,程序员在开发过程中思维需要在项⽬配置和业务逻辑之间来回切换,所有的对程序员来时是⼀件⽐较头疼的事,在程序开发的过程中我觉得程序员因该把更多的时间和经历放在业务代码上,配置这些因该有时间私下悄悄研究2、混乱的项⽬管理项⽬中的依赖管理是⼀件⾮常难搞的事情,本来选择⽤哪些库就已将很头疼了,但是选择完依赖之后还得考虑版本冲突的问题,如果前期搞不好,后期可能出现致命的问题,并且在选择上⾯就是⼀种消耗,并且如果选择不对,后期的返⼯更是⼀个消耗,搞不好还会拉慢项⽬的进度,所有这个⼯作⼀般是公司的主程来搞。

综上,springboot就是解决了以上的问题,能够快速搭建⼀个开发环境,⽽且还没有那么多复杂的配置,并且可以对项⽬依赖进⾏⼀个很好的管理3、springboot的特点1、简易轻便,开箱即⽤,容易上⼿2、快,环境搭建快,没有繁琐的配置,约定⼤于配置3、提供了⼀些⼤型项⽬中常见的⾮功能性的特性,内嵌服务器,安全,指标,健康检测,等以上⼤概就是springboot的主要的⼀些特点4、springboot⽀持的配置⽂件类型1、.properties(优先加载,和之前的⼀样,但是⼀般⽤后者)2、.yml(采⽤缩进的⽅式,⼀般⽤这个,因为他可以放集合数组,并且⽐较清晰,容易阅读)3、.yaml(同上)5、springboot⾃动配置原理springboot的有⼀个启动类,可以从这个启动类出发进⾏探究:启动类上⾯有⼀个关键的注解:@SpringBootApplication,main⽅法中有⼀个run⽅法,springApplication.run(),分开讨论⼀下:1、**SpringBootApplication:**点击进⼊,可以看到有七个关键的注解:@Target(ElementType.TYPE)注解在什么位置⽣效,ElementType.TYPE在类上@Retention(RetentionPolicy.RUNTIME)什么时候⽣效,RetentionPolicy.RUNTIME运⾏时⽣效@Documented 是否⽣成api⽂档@Inherited 是否被继承**@SpringBootConfiguration(点进去@Configuration)**声明了当前类为配置类,springboot会⾃动扫描到添加了@Configuration的类,并且读取了配置信息,@SpringBootConfiguration声明了当前类为springboot的配置类,springboot有⼀个,所以我们不需⾃⼰添加@EnableAutoConfiguration是否引⼊了⼀些第三⽅库,如果引⼊了第三⽅库的⼀些依赖,这些配置⽣效,所以我们在构建了springboot项⽬后,如果想要引⽤第三⽅库,只需要导⼊相应的依赖,配置都交给springboot处理@ComponentScan就是⼀个扫描包的作⽤,因为这个注解是加在springboot的启动类,所以扫描的包是在类同级的包以及⼦包,因此,⼀般启动类会放在⼀个⽐较前的包⽬录中。

SpringBoot常用注解总结

SpringBoot常用注解总结

SpringBoot常⽤注解总结Spring Boot总结@SpringBootApplication@SpringBootApplication注解是⼀个快捷的配置注解,在被它标注的类中,可以定义⼀个或多个Bean,并⾃动触发⾃动配置Bean和⾃动扫描组件。

此注解相当于@Configuration、@EnableAutoConfiguration和@ComponentScan的组合;该注解通常被使⽤在主类上。

@Configuration等同于Spring的XML配置⽂件;使⽤Java代码可以检查类型安全,⼀般加在主类上;@EnableAutoConfiguration@EnableAutoConfiguration注解⽤于通知Spring,根据当前类路径下引⼊的依赖包,⾃动配置与这些依赖包相关的配置项;实现⾃动配置可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加在@Configuration类上。

@ConditionalOnClass & @ConditionalOnMissingClass这两个注解属于类条件注解,它们根据是否存在某个类作为判断依据来决定是否要执⾏某些配置;@Configuration@ConditionalOnClass(DataSource.class)class MySQLAutoConfiguration {//...}@ConditionalOnBean & @ConditionalOnMissingBean这两个注解属于对象条件注解,根据是否存在某个对象作为依据来决定是否要执⾏某些配置⽅法;@Bean@ConditionalOnBean(name="dataSource")LocalContainerEntityManagerFactoryBean entityManagerFactory(){//...}@Bean@ConditionalOnMissingBeanpublic MyBean myBean(){//...}@ConditionalOnProperty@ConditionalOnProperty注解会根据Spring配置⽂件中的配置项是否满⾜配置要求,从⽽决定是否要执⾏被其标注的⽅法;@Bean@ConditionalOnProperty(name="alipay",havingValue="on")Alipay alipay(){return new Alipay();}@ConditionalOnResource⽤于检测当某个配置⽂件存在,存在则触发被其标注的⽅法;@ConditionalOnResource(resources = "classpath:website.properties")Properties addWebsiteProperties(){//...}@ConditionalOnWebApplication & @ConditionalOnNotWebApplication这两个注解⽤于判断当前的应⽤程序是否是Web应⽤程序。

SpringBoot同步笔记

SpringBoot同步笔记

SpringBoot同步笔记第⼀个SpringBoot程序环境jdk 1.8maven 3.6.1springboot最新版2.4.0IDE:IDEA1. 官⽹直接⽣成springboot项⽬,然后导⼊到IDEA(正常开发不会⽤)2. IDEA新建springboot项⽬--File-New Project--Spring initializr原理初探⾃动配置:pom.xmlspring-boot-dependencies:核⼼依赖在⽗⼯程中在引⼊⼀些springboot依赖的时候,不需要指定版本,因为有版本仓库启动器<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>这个是⼀个web启动器启动器,是springboot的启动场景spring-boot-starter-web会帮我们⾃动导⼊web环境的所有依赖springboot将所有的功能场景,都变成⼀个个启动器要使⽤什么功能,找到对应的启动器就可以主程序//@SpringBootApplication:标注这个类是⼀个springboot应⽤@SpringBootApplicationpublic class Springboot01HelloApplication {public static void main(String[] args) {//将springboot应⽤启动SpringApplication.run(Springboot01HelloApplication.class, args);}}@SpringBootConfiguration: springboot配置@Configuration:spring配置类@Component:说明是⼀个spring组件@EnableAutoConfiguration:⾃动配置@AutoConfigurationPackage: ⾃动配置包@Import({AutoConfigurationImportSelector.class}) :导⼊类AutoConfigurationImportSelector选择了什么getAutoConfigurationEntry()获得⾃动配置的实体(调⽤了⽅法*)*getCandidateConfigurations()获得候选的配置getSpringFactoriesLoaderFactoryClass()标注了EnableAutoConfiguration注解的类List<String> loadFactoryNames()获取所有的加载配置META-INF/spring.factories:⾃动配置的核⼼⽂件结论:springboot所有⾃动配置都是在启动的时候扫描并加载 spring.factories(所有的⾃动配置类都在这⾥⾯,但是不⼀定会⽣效,要判断条件是否成⽴),只要导⼊了对应的start,就有对应的启动器,有了启动器,⾃动装配就会⽣效,然后配置成功1. springboot在启动的时候,从类路径下/META-INF/spring.factories获取指定的值2. 将这些⾃动配置的类导⼊容器,⾃动配置就会⽣效3. 解决⽅案和⾃动配置的东西都在spring-boot-autoconfigure-2.4.0.jar下yaml可以直接给实体类赋值。

SpringBoot学习总结

SpringBoot学习总结

SpringBoot区别Springboot是springMVC的升级版,两者没有必然联系,可直接学习springBoot,springBoot是伴随着Spring4.0诞生的SpringBoot的特点1.化繁为简,简化配置2.备受关注,是下一代框架3.微服务的入门级框架(微服务是当下比较流行的架构spring为微服务架构提供了一整套组件,统称为SrpingCloud,,springcloud是建立在springBoot的基础之上的)4.使编码变得简单,使配置变得简单,使部署变得简单,使监控变得简单程序配置引入jar包启动类上班必须有@SpringBootApplication注解,controller类要加@RestController注解,方法上注解与模板讲解:@Controller注解:处理http请求@RestController注解:Spring4之后新加的注解,等同于返回json注解的@ResponseBody+controller注解的组合注解@RequestMapping注解:配置url配置@PathVariable 获取url中的数据@RequestParam 获取请求参数的值如果仅仅使用@Controller,返回的字符串就是页面的名称,需要加入srping官方的模板引擎,在属性配置application.properties为springboot的默认配置文件,可配置端口server.port=8081可配置项目路径server.context-path=/gril ,访问路径时的路径就变成localhost:8081/gril/controller名称application.yml文件是springboot的另一种配置文件,这种文件可以减少重复值(推荐,注意:冒属性映射到bean创建Gril.java的java文件,类上加@Component和@ConfigurationProperties(prefix="gril"),创建private String name;和private Integer age;属性创建get和set方法,获取配置文件前缀是gril 的配置映射到javabean属性中,在controller中注入这个bean@Autowired Girl gril ;如果有多个配置文件比如application.yml,application-A.yml和application-B.yml,如果想使用B数据库操作JAP(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有hibernate,toplink等Spring Boot中使用Swagger2构建强大的RESTful API文档由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot 的用户会用来构建RESTful API。

[记录点滴]SpringBootAdmin源码分析笔记

[记录点滴]SpringBootAdmin源码分析笔记

[记录点滴]SpringBootAdmin源码分析笔记[记录点滴]Spring Boot Admin源码分析笔记0x00 摘要本⽂是过去使⽤Spring Boot Admin时候分析源码的笔记。

虽然⽐较简单,但是也可以看出Spring Boot Admin的实现思想。

0x01 如何使⽤如何使⽤?在你⾃⼰application中加⼊ @EnableAdminServer,就可以被监控到。

@EnableAdminServer的实现@Import(AdminServerImportSelector.class) ----- 引⼊Spring Boot Admin的⾃动配置类@EnableZuulServer -------------------------- Spring Boot Admin做了个gatewaypublic @interface EnableAdminServer {}@Import(AdminServerImportSelector.class)其作⽤是导出配置:NotifierConfiguration,HazelcastStoreConfiguration,AdminServerCoreConfiguration,AdminServerWebConfiguration,DiscoveryClientConfiguration,RevereseZuulProxyConfiguration0x02 configuration以下是各种相关配置AdminServerCoreConfiguration ⽣成很多基础beanAdminServerWebConfiguration web相关的配置和bean,EventListenerDiscoveryClientConfiguration 与client发现相关的beanNotifierConfiguration: NotifierListener,以及各种notify需要的配置:CompositeNotifierConfiguration,MailNotifierConfiguration。

SpringBoot入坑笔记之spring-boot-starter-web配置文件的使用

SpringBoot入坑笔记之spring-boot-starter-web配置文件的使用

SpringBoot⼊坑笔记之spring-boot-starter-web配置⽂件的使⽤经过上⼀篇的介绍,相信⼩伙伴们已经按奈不住内⼼对springboot的向往,本篇我将继续向⼩伙伴介绍springboot配置⽂件的配置,已经全局配置参数如何使⽤,好了下⾯开始我们今天的内容介绍。

我们知道Spring Boot⽀持容器的⾃动配置,默认是Tomcat,当然我们也是可以进⾏修改的: 1、⾸先我们排除spring-boot-starter-web依赖中的Tomcat:在pom⽂件中排除tomcat的starter<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency> 2、加⼊Jetty容器<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency> 这样我们的springboot容器就修改成Jetty容器了。

为了⽅便我们的调试,这⾥给⼤家推荐⼀款http调试⼯具:Postman 下⾯我们聊⼀下springboot的全局配置⽂件:application.properties 在开发中⼀定遇到过这样的需求,就是修改我们的容器访问端⼝,既然springboot默认加载容器,那么端⼝设置当然是通过配置⽂件来控制的,相当⽅便我们只需要在配置⽂件中添加:server.port=6666 这样我们的容器端⼝就修改为6666了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.初识SpringBoot
1.1.概述
SpringBoot是时下较为流行的一门技术,他为构建各类企业级应用提供解决方案。

SpringBoot是Spring4.0时作为Spring的组件一同发布的。

SpringBoot其实就是一个“Spring全家桶”。

1.2.Spring项目
编写大量的配置文件
导入大量的jar包
项目需要进行打包部署
1.3.SpringBoot的优点
创建独立的Spring项目
部署过程中不需要打包成war文件
为各类场景提供大量的启动器(starter)来来简化配置
在很多情况下可以自动配置Spring和第三方jar包
不需要产生代码和xml的配置
SpringBoot可以更好的和云计算进行无缝衔接
2.微服务
2.1.概述
提出者:Martin Fowler
思想:将应用都开发成小的、独立的模块进行部署,然后通过http 协议进行访问。

2.2.单体应用
2.2.1.单体应用
所有的功能模块都包含在一个应用中。

2.2.2.优点
部署简单方便
便于项目的开发及调试
2.2.
3.缺点
不便于功能模块的修改及升级
不便于资源的利用
2.3.微服务
2.3.1.概述
将单体中的功能模块独立成一个一个独立的个体进行部署,然后通过Http协议进行访问调用。

2.3.2.优点
根据需求来部署每一个服务,更好的利用服务器资源 便于模块功能的升级和维护
2.3.3.缺点
增加了部署和维护难度
2.3.4.微服务架构
将一系列小的服务连接在一起形成一个大的应用网络。

3.HelloWorld
3.1.需求
向服务发送一个请求,然后在客户端输出“Hello World”。

3.2.技术要求
了解或熟练运行Spring框架
熟练运行Maven构建及依赖
3.3.工具
IDEA2017、Eclipse或MyEclipse
Maven3.3+
SpringBoot1.5.21
3.4.配置IDEA
1)启动IDEA并点击Configure===》Settings进入到配置界面
2)选择功能项
3)选择Build Tools ==》Maven
4)配置Maven环境
3.5.创建HelloWord
1)new project
2)选择Maven工程并配置SDK的位置
3)填写项目坐标
4)输入项目名称及存储位置
5)导入依赖
6)编写主应用
7)编写业务代码
8)启动
9)测试。

相关文档
最新文档