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";
相關文章
相關標籤/搜索