springboot快速入门

SpringBoot快速入门    springboot是什么?为何要用?怎么用?  springboot是为了简化spring的开发的一个轻量级的框架,减小配置,简化maven配置,嵌入tomcat,不须要部署war包1.添加依赖    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.1.3.RELEASE</version>    </parent>     <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>      </dependency>2.使用    1.helloworld        新建App启动类,增长注释@EnableAutoConfiguration        @RestController        @EnableAutoConfiguration        public class Application1        {            @RequestMapping("/")            String home() {                return "Hello World!";            }            public static void main( String[] args ) { SpringApplication.run(Application1.class,args); }        }        详见Application1        访问入口:http://localhost:8080    2.启动类使用@SpringBootApplication        详见Application2        访问入口:http://localhost:8080/test/hello    3.与mybatis集成        1.建表t_user 详见:t_user.sql        2.使用mybatis generator 生成model,Dao,xml   依赖mybatis-generator-core        3.依赖            <dependency>                <groupId>org.mybatis.spring.boot</groupId>                <artifactId>mybatis-spring-boot-starter</artifactId>                <version>1.2.0</version>            </dependency>        4.配置数据源,新建application.properties        5.在UsersMapper增长注解@Mapper  或者在启动类上增长@MapperScan(value = {"com.suns.dao"})        6.新建测试类UserTest     依赖spring-boot-starter-test            @SpringBootTest(classes = {Application3.class})            @RunWith(SpringRunner.class) // SpringJUnit4ClassRunner            public class UserTest {...}        详见UserTest        访问入口:UserTest.testAdd    4.事务支持        1.注意:表的存储引擎要为InnoDB        2.新建IUserService ,UserServiceImpl,增长注解@Transactional        3.在启动类上增长@EnableTransactionManagement        详见UserTest        访问入口:UserTest.testAddBatch    5.全局异常        1.新建ExceptionController#testExeception(), int i=1/0;        2.访问 http://localhost:8080/testExe   会报错 :Whitelabel Error Page        3.解决办法:新建全局异常处理类            @ControllerAdvice            public class GlobalExceptionHandler {}        4.访问一个不存在的路径 http://localhost:8080/testExe12343   又会报错 :Whitelabel Error Page        5.解决办法:            1.在全局异常处理类GlobalExceptionHandler中新增                @Bean                public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){}            2.新建BaseController,必定公共处理的方法                @RequestMapping("/404.do")                public Object error_404() {}    6.静态资源访问,如js,css,图片,html等        Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合以下规则:        /static        /public        /resources        /META-INF/resources        1.在resources下新建static,放一张图片20190221.png        2.访问http://localhost:8080/20190221.png    7.与jsp集成  (访问不到jsp页面,有问题)        通常来讲springboot不建议使用jsp。  并且springboot 内置的tomcat 并无集成jsp,也没有el表达式。所以若是要使用须要添加依赖        1.依赖            <dependency>                <groupId>javax.servlet</groupId>                <artifactId>jstl</artifactId>            </dependency>            <dependency>                <groupId>org.apache.tomcat.embed</groupId>                <artifactId>tomcat-embed-jasper</artifactId>            </dependency>        2.在application.properties中增长            spring.mvc.view.prefix=/WEB-INF/jsp            spring.mvc.view.suffix=.jsp        3.依次新建webapp目录,WEB-INF目录,jsp目录,index.jsp        4.访问 http://localhost:8080/jsp/index    8.模板引擎thymeleaf        SpringBoot 推荐使用模板引擎来渲染html,若是你不是历史遗留项目,必定不要使用JSP,经常使用的模板引擎不少,有freemark,thymeleaf等,其实都大同小异其中springboot 强烈推荐的是用thymeleaf        1.依赖            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-starter-thymeleaf</artifactId>            </dependency>        2.注释掉jsp相关jar ,并注释application.properties中jsp的配置        3.新建controller            @Controller            @RequestMapping("/tpl")            public class ThymeleafController {}        4.依次在resources下新建templates目录,testThymeleaf.html  注意:必定要templates,不能是template,否则会找不到        5.访问:http://localhost:8080/tpl/testThymeleaf    9.swagger2  自动生成api文档,并能够在线测试        1.依赖            <dependency>                <groupId>io.springfox</groupId>                <artifactId>springfox-swagger2</artifactId>                <version>2.7.0</version>            </dependency>            <dependency>                <groupId>io.springfox</groupId>                <artifactId>springfox-swagger-ui</artifactId>                <version>2.7.0</version>            </dependency>        2.增长配置类            @EnableSwagger2            @Configuration            public class SwaggerConfig {}        3.新建测试类            @RestController            @RequestMapping(value="/swagger")            public class SwaggerController {}        4.访问入口:http://localhost:8080/swagger-ui.htm    10.日志        般状况下,springboot日志只会输出到控制台,并不会写入到日志文件,可是,在一些正式环境的应用中,咱们须要经过在 application.properites 文件中配置 logging.file 文件名称和 logging.path 文件路径,将日志输出到日志文件中        1.在application.properties增长配置            logging.path = e:/log            logging.file = xxx.log            logging.level.root = info            # 配置具体类的日志级别            logging.level.org.springframework.web=debug            logging.level.com.suns.controller.TestContronller=info            logging.level.com.suns.controller.ThymeleafController=debug            注意:若是只配置 logging.path,在 /var/tmp文件夹生成一个日志文件为 spring.log。若是只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件            默认是使用logback,若是要使用其余的日志框架,须要排除掉logback        2.使用log4j2                <!-- log4j2 ,因为默认使用logback在扩展log4j2以前先要把logback移除-->                <dependency>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter-log4j2</artifactId>                </dependency>        3.使用log4j, 通常使用log4j2,而不使用log4j            若是不仅为了学习集成log4j,在工做是最好不要使用log4j,毕竟有了log4j2,也有了logback使用log4j就是吃饱了撑着在springboot中并无提供对log4j这个依赖的支持,所以要使用它配置起来仍是挺麻烦的。在: mvnrepository.com 中发现log4j最新版本spring-boot-starter-log4j是1.3.8.RELEAS            1.依赖            <!-- log4j ,因为默认使用logback在扩展log4j2以前先要把logback移除   ,通常不使用log4j,如今已不维护了 -->            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-starter-log4j</artifactId>                <version>1.3.8.RELEASE</version>            </dependency>            2.在resources下新建log4j.properties,log4j的日志控制是在log4j.properties,包括日志级别            3.新建Log4jController,  private final Logger logger = Logger.getLogger(Log4jController.class);  使用logger输出日志            4.访问入口:http://localhost:8080/log4j/hello            5.就能够看到当前目录下有logs/all.log文件了    11.使用aop对日志进行统一处理        1.依赖            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-starter-aop</artifactId>            </dependency>        2.增长切面类            @Aspect            @Component            public class WebLogAspect {}            @Pointcut("execution(* com.suns.controller.*.*(..)))")  拦截controller        3.访问入口:http://localhost:8080/test/hello    随意访问一个路径,查看日志输出    12.springboot热加载/热部署    devtools        热部署通常用于开发环境,不会用到生产环境。spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改以后,从新启动应用,可是速度比手动中止后再启动还要更快,更快指的不是节省出来的手工操做的时间        原理:其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另外一个ClassLoader加载会更改的类,称为  restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,从新建立一个restart ClassLoader,因为须要加载的类相比较少,因此实现了较快的重启时间        1.依赖            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-devtools</artifactId>            </dependency>        2.修改properties文件            若是使用的Thymeleaf  模板,那么请直接在application.properties中添加  spring.thymeleaf.cache=false            若是使用的FreeMarker 模板,那么请直接在application.properties中添加  spring.freemarker.cache=false        3.若是是在idea中使用热加载须要做以下步骤。若是是ecplise,则不须要作以下步骤,只须要ctrl+s就会自动从新编译代码了            1.在pom中增长以下插件                <!-- 用户devtools热部署的插件 -->                <plugin>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-maven-plugin</artifactId>                    <configuration>                        <!-- 若是不设置fork,那么不会restart,devtools热部署不会起做用-->                        <fork>true</fork>                    </configuration>                </plugin>            2.手动编译:修改完代码,按快捷键Ctrl+F9,手动构建项目,或者只修改单个类文件的话,按Ctrl+Shift+F9,从新编译该类文件,便可触发重启服务            3.自动编译:                1.File -> Settings -> Compiler,勾选 Build Project automatically                2.按快捷键Ctrl+Shift+Alt+/,选择 Registry... ==> 勾选 compiler.automake.allow.when.app.running 便可3.高级使用    1.集成redis        1.依赖            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-starter-data-redis</artifactId>            </dependency>        2.在配置文件application.properties中增长配置:            # Redis数据库索引(默认为0)            spring.redis.database=0            # Redis服务器地址            spring.redis.host=47.107.146.57            # Redis服务器链接端口            spring.redis.port=6379            # Redis服务器链接密码(默认为空)            spring.redis.password=            # 链接超时时间(毫秒)            spring.redis.timeout=5000        3.测试类            详见:RedisTest,首先要启动redis服务    2.集成RabbitMQ        1.依赖            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-starter-amqp</artifactId>            </dependency>        2.在配置文件application.properties中增长配置:            spring.rabbitmq.host=47.107.146.57            spring.rabbitmq.port=5672            spring.rabbitmq.username=admin            spring.rabbitmq.password=admin        3.RabbitMQ配置类:建立Queue            @Configuration            public class RabbitConfig {                @Bean                public Queue queue(){                    // 建立一个队列,名称为:rmq001                    return new Queue("rmq001");                }            }        4.生产者            @Component            public class RabbitSender {                @Autowired                private AmqpTemplate amqpTemplate;                public void send(){                    amqpTemplate.convertAndSend("rmq001","rabbitmq发送到队列rmp001测试");                    System.out.println("生产者:"+"rabbitmq发送到队列rmp001测试");                }            }        5.消费者            @RabbitListener(queues = {"rmq001"})            @Component            public class RabbitReceiver {                @RabbitHandler                public void receive(String msg){                    System.out.println("消费者:"+"rabbitmq收到队列rmp001数据:"+msg);                }            }        6.测试类            详见:RabbitMQTest ,首先要启动rabbitmq服务    3.监控管理Actuator        Actuator是spring boot的一个附加功能,可帮助你在应用程序生产环境时监视和管理应用程序。可使用HTTP的各类请求来监管,审计,收集应用的运行状况.特别对于微服务管理十分有意义        缺点:没有可视化界面(Spring cloud 还会用到这功能,就能够看到界面了)        1.依赖            <dependency>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-starter-actuator</artifactId>            </dependency>        2.在application.properties中增长配置            #监控管理actuator            # 加载全部的端点/默认只加载了 info / health            management.endpoints.web.exposure.include=*            #描述信息            info.blog-url=www.test.com            info.author=mk            info.version=v1.0.0        3.测试入口:http://localhost:8080/actuator/info  或 http://localhost:8080/actuator            Actuator访问路径            经过actuator/+端点名就能够获取相应的信息,如            /actuator/beans    显示应用程序中全部Spring bean的完整列表。            /actuator/configprops  显示全部配置信息。            /actuator/env  陈列全部的环境变量。            /actuator/mappings 显示全部@RequestMapping的url整理列表。            /actuator/health   显示应用程序运行情况信息 up表示成功 down失败            /actuator/info 查看自定义应用信息    4.自定义starter        在学习SpringBoot的过程当中,不论是集成redis仍是RabbitMQ,甚至是前面集成mybatis已经学习了不少starter,这些starter都是springboot为咱们提供的一些封装,这些starter能很是方便快捷的增长功能,并不须要不少配置,即便须要配置也就在application.properties稍微配置下就能够了。        那么接下来就学习下怎么建立属于本身的starter,如搭建本身的redis-starter。详见springboot-starter        1.新建空的父项目 springboot-starter        2.新建本身项目 my-redis-starter,只引入spring-boot-starter包,不须要引入spring-boot-starter-web包            1.依赖                <dependency>                    <groupId>org.springframework.boot</groupId>                    <artifactId>spring-boot-starter</artifactId>                </dependency>                <!-- redis -->                <dependency>                    <groupId>redis.clients</groupId>                    <artifactId>jedis</artifactId>                    <version>2.6.1</version>                </dependency>            2.新建属性配置类MyRedisProperties            3.新建配置类MyRedisConf            4.依次新建resources目录,META-INF目录,spring.factories文件,内容以下                #配置自定义Starter的自动化配置                org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.suns.redis.MyRedisConf        3.新建测试项目    my-redis-starter-test            1.依赖,引入my-redis-starter                 <dependency>                    <groupId>com.suns</groupId>                    <artifactId>my-redis-starter</artifactId>                    <version>1.0</version>                </dependency>            2.配置本身的属性                #引入自定义的redis                myredis.host=47.107.146.57                myredis.port=6379            3.测试                详见RedisTest        原理:经过启动类的注解@SpringBootApplication,到@EnableAutoConfiguration,到@Import(AutoConfigurationImportSelector.class)            而AutoConfigurationImportSelector实现了ImportSelector接口,重写selectImports方法,最终是加载META-INF/spring.factories配置文件中的类            在META-INF/spring.factories中能够自定义本身的配置类,而后经过配置类来初始化本身的组件(@Configuration ,@Bean等),如redis,mybaits等            接着只要引入该jar包就能够直接使用里面的组件了,如@Autowired private Jedis jedis            @SpringBootApplication                @EnableAutoConfiguration                    @Import(AutoConfigurationImportSelector.class) 实现了ImportSelector接口,重写selectImports方法                        public String[] selectImports(AnnotationMetadata annotationMetadata) {}                            AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);                                List<String> configurations = getCandidateConfigurations(annotationMetadata,attributes);                                    List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());                                        classLoader.getResources(FACTORIES_RESOURCE_LOCATION);//FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
相关文章
相关标签/搜索