• Spring Boot提供的特性 - 张建斌 - 博客园

  • SpringBoot笔记一 - jsyxcjw的专栏 - CSDN博客

  • springboot日志输出到文件 - xiao雷博客 - CSDN博客

  • (4条消息)使用@SpringBootTest注解进行单元测试 - Google一下的专栏 - CSDN博客

  • (4条消息)Spring Boot Junit单元测试MockMvc使用(MockHttpServletRequestBuilder MvcResult ModelAndView json) - take that moeny - CSDN博客



SpringBoot学习心得体会

  1. 加载一个properties的配置文件,用spring boot只要加几个注解即可搞定,不用写一堆代码。




SpringBoot快速入门

  • SpringBoot学习-(一)如何在MyEclipse中创建SpringBoot项目

  1.  疑问1:在MyEclipse右击SpringBoot项目,run成功了,但是浏览器怎么访问不了tomcat?

    1. SpringBoot_第1张图片



                 SpringBoot_第2张图片

                

                在浏览器输入:http://127.0.0.1:8080,浏览器返回404。SpringBoot就是这样,直接在MyEclipse里,右击run,它的tomcat的主页是无法访问的,只能访问项目。

                我项目的根路径配置了一下:

                SpringBoot_第3张图片

                所以浏览器里访问:http://127.0.0.1:8080/aaa/,就会有回调

                image.png

                访问一个接口:http://127.0.0.1:8080/aaa/hello,返回

                image.png

            

                

                


SpringBoot官方文档学习

        https://www.cnblogs.com/larryzeal/p/5799195.html

                ------mvn 运行或者打包springboot项目的jar包,java -jar执行jar包。mvn打包时的文件名是通过pom.xml里配置的。

                

                

        1)SpringBoot学习:

        http://www.cnblogs.com/larryzeal/p/5765945.html

        ***运行main方法可能会报错,改一下jre就好了:http://www.xwood.net/_site_domain_/_root/5870/5874/t_c273666.html

        

        使用curl模拟网络请求:https://jingyan.baidu.com/article/e3c78d64897d303c4c85f52d.html

        

        SpringBoot CLI安装:https://www.cnblogs.com/smile361/p/4710595.html

        

        


        2)SpringBoot配置文件

        https://www.cnblogs.com/shamo89/p/8178109.html (注意yaml和properties格式写法,yaml是层级写法,properties是java包名的写法)


        https://blog.csdn.net/j080624/article/details/80508606 (默认配置文件路径及其优先级)


        2-1>使用@value注解,加载配置文件可能有问题https://blog.csdn.net/fuck487/article/details/80362611,配置文件的路径和key都没有问题,但是项目还是启动不起来,有可能就是配置

                文件的编码问题。

                使用@value注解,有可能网页上访问是乱码。解决办法:https://blog.csdn.net/weixin_41987553/article/details/82958811?utm_source=blogxgwz0

                (这个主要是配置文件里的value不能加引号,加上引号无论怎么设置文件编码格式都会乱码。)

                

                SpringBoot_第4张图片

                看source视图:

                SpringBoot_第5张图片

                 可以发现中文被编码成unicode码了。

                 所以新建properties文件,如果有中文属性,最好使用ide来创建

                 -------------------------

                 server.contextPath属性

                        表示项目的根路径,如果没有配置,访问项目首页默认为:http://ip:port/,假如server.contextPath为xxx,那么访问项目首页默认为http://ip:port/xxx,但是在controller里

                 "/"映射的还是首页

                 

                 

        2-2>建立resources文件夹时,使用ide建立,不要在目录里手动建立,否则MyEclipse无法正常识别。也有可能会造成乱码。

        2-3>使用@PropertySource将bean与配置文件绑定

                第1步:建立属性文件

                SpringBoot_第6张图片

                第2步:编写bean文件

                绑定属性文件和属性前缀

        @Component
        @ConfigurationProperties(prefix = "connection") 
        @PropertySource(value = {"classpath:connection.properties"})
        public class ConnectionSettings {
	    private String username;
	    private String remoteAddress;
	    private String password ;

	    public String getUsername() {
	        return username;
	    }
	    public void setUsername(String username) {
	        this.username = username;
	    }
	    public String getRemoteAddress() {
	        return remoteAddress;
	    }
	    public void setRemoteAddress(String remoteAddress) {
	        this.remoteAddress = remoteAddress;
	    }
	    public String getPassword() {
	        return password;
	    }
	    public void setPassword(String password) {
	        this.password = password;
	    }
		@Override
		public String toString() {
			return "ConnectionSettings [username=" + username
					+ ", remoteAddress=" + remoteAddress + ", password="
					+ password + "]";
		}  
        }

                第3步:引用bean文件

                        ----》bean使用@Autowired自动注入,无法直接new出来(???)。

                        ----》注意bean与controller在一个目录下,否则会报异常:ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sampleController': Unsatisfied dependency expressed through field 'configBean': No qualifying bean of type [cn.larry.spring.bean.ConnectionSettings] found for dependency [cn.larry.spring.bean.ConnectionSettings]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [cn.larry.spring.bean.ConnectionSettings] found for dependency [cn.larry.spring.bean.ConnectionSettings]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)

                               异常原因是因为bean没有在controller的目录下 https://blog.csdn.net/zhangcc233/article/details/80898931  (???)

                                Mappen注解依赖地址:https://blog.csdn.net/qq_37496091/article/details/77975871


                SpringBoot_第7张图片

        2-4>通过${}在.xml中引用.properties中的属性

                https://blog.csdn.net/gghh2015/article/details/80443453

        

        

        3)SpringBoot Banner定制

             https://www.jb51.net/article/136062.htm

        4) CommandLineRunner接口使用例子

             用于程序启动有且仅有一次初始化的过程

             https://www.cnblogs.com/chenpi/p/9696310.html

         5) exitCode使用例子

             用于程序销毁时使用

             https://blog.csdn.net/gebitan505/article/details/70154019

         6)利用Profile配置开发环境

             https://blog.csdn.net/liujun03/article/details/82592929

         7)日志管理

             https://www.jianshu.com/p/59787a123b05

             https://blog.csdn.net/lchq1995/article/details/80080642

             logback-spring.xml详解:

                     https://www.cnblogs.com/lixuwu/p/5810912.html

             logback-spring.xml示例文件:

                     https://blog.csdn.net/xu_san_duo/article/details/80364600

             注意配置输出路径时,路径中的斜杠应为"/",而不是“\”,否则可能不识别。(\\ /二选一)

             ****如果logback-spring.xml中没有定义log.path属性,则会在工程目录下生成log.path_IS_UNDEFINED目录。

             ****在logback-spring.xml中,可以通过${}来应用application.properties中定义的日志相关的配置参数:

           

                    通过https://www.cnblogs.com/larryzeal/p/5799633.html,可以知道有一个映射表:

                    SpringBoot_第8张图片

            


###############################################################################################################################

 英文官方文档学习 https://spring.io/guides/gs/spring-boot/,原文理解翻译如下:

(说明:代码我就不粘贴过来了,仅仅翻译)


一.Create a simple web application

      创建controller

      @RestController:SpringMVC用来处理web请求

      @RequestMapping:将网络请求映射到某个方法上

      将application写好启动之后,通过访问项目主页网页就会显示

      image.png

       之所以返回纯文字而不是一个view是@RestController@Controller 和@ResponseBody结合的结果。

      

二.Create an Application class

       @SpringBootApplication:相当于@Configuration@EnableAutoConfiguration@EnableWebMvc、@ComponentScan的集合体

       @ComponentScan:会扫描application所在的包下的各种组件、配置和服务。

       使用SpringApplication.run()即可轻松启动项目,不需要web.xml或者其他的工作。


       commandLineRunner方法结合@Bean,这个方法会在程序启动时执行。


三.Run the application

       commandLineRunner方法结合@Bean,这个方法会在程序启动时执行。   

     使用curl 访问主页,注意最后要加/,否则命令行没有显示,但是浏览器可以显示。


四.Add Unit Tests(单元调试)

     用curl 访问主页,注意最后要加/,否则命令行没有显示,但是浏览器可以显示

     https://www.cnblogs.com/qlong8807/p/7121522.html (作为对官方示例的补充,官方导入了static方法却没有说明)


     进行单元测试的时候可能会出现错误:java.lang.UnsupportedClassVersionError: javax/servlet/ServletContext : Unsupported major.minor version 51.0

            ----》解决办法:https://blog.csdn.net/yufang131/article/details/80249800

                     但是将JDK升到1.8,项目又会出现问题:https://blog.csdn.net/qq_26718271/article/details/76623974

                     所以把编译器一起升级

     

  •  MockMvc

     https://www.cnblogs.com/0201zcr/p/5756642.html

     https://blog.csdn.net/qq_16513911/article/details/83018027 (详细用法)

     官方对MockMvc的解释:MockMvc来自于Spring Test,允许你通过一系列的创建者类向DispatcherServlet发送HTTP请求,对结果进行断言。通过使用@AutoConfigureMockMvc

     @SpringBootTest来注入一个MockMvc实例。使用@SpringBootTest会创建全局应用上下文

     

    @SpringBootTest

    使用@SpringBootTest注解可以运行环境,测试后台代码。

    @RunWith(SpringRunner.class) 
        @SpringBootTest(classes = StartUpApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 
        public class PlatsystemApplicationTests {
            
        }//其中,classes属性指定启动类,SpringBootTest.WebEnvironment.RANDOM_PORT经常和测试类中@LocalServerPort一起在注入属性时使用。会随机生成一个端口号。

     @WebMvcTest(??)

     SpringBoot会在任何情况下自动定位程序的主程序类

  • 集成测试

    随机端口(用于一台服务器上有多个服务程序需要启动时,避免端口冲突。)

    https://my.oschina.net/zjllovecode/blog/1605981




    当项目集成了测试依赖之后,使用mvn package打包时会出现异常:找不到junit相关包

    解决办法:https://blog.csdn.net/nakiri_arisu/article/details/80325641 

    


五.Add production-grade services

    不知道为啥和官方文档不一样,不带actuator的地址 http://localhost:8080/aaa/health 可以正常访问

    image.png

    但是加了actuator就无法正常访问,应该是依赖的这个库的源码改了吧。

    

五.JAR support and Groovy support

     创建app.groovy不一定要在springboot工程里创建,随便一个地方创建这个文件即可。然后run的时候,之前跑起来的springboot项目要先关闭。