boot怎么進入,springboot啟動圖標_SpringBoot基礎教程

 2023-10-13 阅读 33 评论 0

摘要:往期推薦老男孩Go語言教程2020黑馬Python圖靈學院微服務教程網易云課堂2019 Java高級教程郭術生AE教程簡單介紹springBoot按照開發習慣對原來的xml配置提供了預配置,開發人員使用springBoot框架,不用再手工配置xmlboot怎么進入,springBoot按包依賴習慣,

d952bff3e8241c24e0257519a362516b.png

d7242b34f328c4913c071aa468e12598.png

往期推薦

  • 老男孩Go語言教程
  • 2020黑馬Python
  • 圖靈學院微服務教程
  • 網易云課堂2019 Java高級教程
  • 郭術生AE教程

簡單介紹

springBoot按照開發習慣對原來的xml配置提供了預配置,開發人員使用springBoot框架,不用再手工配置xml

boot怎么進入,springBoot按包依賴習慣,提供了各個常用模塊的依賴啟動器starter

  • 官方提供的啟動器如:spring-boot-starter-*
  • 第三方的啟動器如:*-spring-boot-starter
  • 比如web模塊,test模塊,mybaits模塊,redis模板...

項目結構說明

src/main/java/*Application啟動類,主類

src/main/resources/static靜態資源路徑(css/js/圖片/視頻。。。純靜態資源)

src/main/resources/templates視圖模板文件。(html加thymeleaf模板引擎)

bootmode。src/main/resources/application.properties項目核心配置文件。改默認配置的地方

pom.xml

父工程:項目有兩個父工程,管理了jdk版本,管理了maven的resources配置,管理了常用依賴的版本.

jdk版本:重寫父工程的java.version.重新制定jdk版本

dependency依賴:配置啟動器依賴。

java start,spring-boot-maven-plugin打包插件:打jar包的插件,配置啟動類位置

項目運行方式

jar包運行:java -jar jar包名稱

war包運行:為了tomcat調優,或者不用tomcat,需要打war包

  • pom中加入
<packaging>war</packaging>
<build><finalName>war包名稱</finalName>
</build>
  • 默認tomcat啟動器,設置scope為provided,避免與本地tomcat沖突
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>
</dependency>
  • 要有入口配置類,等價于web.xml,配置類從SpringBootServletInitializer抽象類派生,重寫configure方法,把配置類加到環境中
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
// 等價于web.xml
public class WebServletInit extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(Boot1Application.class);}
}

配置文件

  • application*.yml:這個更常用
  • application*.properties:這個的優先級更高,重復配置以properties為主
  • 存放位置:
  1. /
  2. /config
  3. src/main/resources/.yml或者.properties
  4. src/main/resources/config/.yml或者.properties,優先級最高

啟動類

  • @SpringBootApplicaiotn
    • @SpringBootConfiguration:表示當前類是一個配置類
      • @Configuration
    • @EnableAutoConfiguration:開啟自動配置
      • @AutoConfigurationPackage:設置包掃描范圍。獲取啟動類所在的包作為掃描包范圍。
      • @Import({AutoConfigurationImportSelector.class}):
        • 選擇到META-INF/spring.factories文件,找到keyorg.springframework.boot.autoconfigure.EnableAutoConfiguration的值,選擇到117個配置類。通過Import注解導入到總配置類。
    • @ComponentScan:包掃描
      • @Controller,@Service,@Repository,@Bean,@Value,@Component,@AutoWired,@Resource,@Configuration
    public static void main(String[] args) {SpringApplication.run(WebcrmApplication.class, args);}"啟動tomcat,filter,listener,啟動標志,啟動日志"

獲取配置類中的自定義注解

@Value注解

  • @Value注解獲取properties配置文件中的數據,例:@Value("${key}")
  • @PropertySource("classpath:自定義properties文件的名稱"),寫到配置類上。

springboot注解大全?@ConfigurationProperties(prefix="")

  • 集合注值
jdbc:url: jdbc:mysql://localhost:3306/jtxyhdriverClassName: com.javasm.DriveruserName: rootpassword: root@ConfigurationProperties(prefix = "jdbc")
public class MyDataSourceProperties {private String url;private String driverClassName;private String userName;private String password;

自定義banner

resources下添加banner.txt,自動加載

自定義歡迎頁

resources/resources或resources/static或resources/public或/下自定義一個index.html文件,優先級由高到低

替換ico圖標

靜態資源路徑下放favicon.ico圖標

java springboot。在tomcat下的root下放favicon.ico

在頁面的link標簽引入favicon.ico

使用

自定義攔截器,消息轉換器

使用核心接口WebMvcConfigurer 來自定義擴展

@Configuration  // 啟動類自動加載這個類
public class MyWebMvcConfigurer implements WebMvcConfigurer {// 做統一視圖解析器@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/login").setViewName("login");registry.addViewController("/uinfo").setViewName("uinfo");registry.addViewController("/cinfo").setViewName("cinfo");registry.addViewController("/minfo").setViewName("minfo");}// 設置攔截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {// new MyInterceptor()是自己寫一個繼承HandlerInterceptor接口的攔截器registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/login","/");}//數據格式工具@Overridepublic void addFormatters(FormatterRegistry registry) {// new MyDateFormater()是自定義的一個格式化日期的類,繼承Converter<String,Date>接口registry.addConverter(new MyDateFormater());}// 靜態資源@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 靜態資源下的文件會放行,但文件夾中的文件不會,所以如果有文件夾就這樣設置registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");}
}

異常處理

  • 在SpringBoot中,自動配置機制會加載ErrorMvcAutoConfiguration類,在該類中由basicErrorController主要負責發生錯誤后的頁面跳轉,而basicErrorController中的errorHtml()和error()方法就分別是返回html和json的兩個控制器。
  • 當用瀏覽器訪問時,出錯,返回錯誤頁面,頁面包含
    • timestamp,status,message,error,path
  • 非瀏覽器客戶端訪問時,返回的json字符串,
{"timestamp": "2019-12-20T02:27:45.856+0000", "status": 404, "error": "Not Found", "message": "No message available", "path": "/page"
}

2b66b0151d04ae499da0dd6ff442ad60.png

Springboot教程,

6d4dcf18e910f93cbd47313f5664f41e.png

d5162c1dcbdbab450c2e30350b6f6109.png

7103aad323a262667b27737d1a510bb8.png

自定義異常處理

  1. 自定義錯誤信息:從DefaultErrorAttributes派生子類
  2. 自定義錯誤頁面
  • 創建error.html,得到自定義錯誤信息
  • 或者創建error目錄,下加4xx.html,5xx.html
public class MyErrorAttributes extends DefaultErrorAttributes {@Overridepublic Map<String, Object> getErrorAttributes(WebRequest webRequest, boolean includeStackTrace) {Map<String, Object> map = super.getErrorAttributes(webRequest, includeStackTrace);// 在map中添加自定義要顯示的異常信息return map;}
}

日志集成

springboot的優點。SpringBoot默認集成有日志功能,使用的是Apache的commons-logging做日志的輸出功能,且使用的logback的日志機制

替換默認使用的日志:

排除默認的logging依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId><!-- 排除默認的依賴 --><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions>
</dependency>

加入log4j2依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

springboot2,自定義log4j2模板

<?xml version="1.0" encoding="UTF-8"?>
<configuration><appenders><!-- 控制臺輸出 --><console name="Console" target="SYSTEM_OUT"><PatternLayoutpattern="%d{HH:mm:ss.SSS} [%t] %-5level %class %L %M -- %msg%n" /></console><!-- fileName:輸出路徑 filePattern:命名規則 --><RollingFile name="RollingFileDebug"fileName="E:/logs/debug.log"filePattern="E:/logs/$${date:yyyy-MM-dd}/debug-%d{yyyy-MM-dd}-%i.log"><Filters><ThresholdFilter level="DEBUG" /><ThresholdFilter level="INFO" onMatch="DENY"onMismatch="NEUTRAL" /></Filters><!-- 輸出格式 --><PatternLayoutpattern="%d{HH:mm:ss.SSS} [%t] %-5level %class{36} %L %M - %msg%n" /><Policies><!-- 單個日志文件的大小限制 --><SizeBasedTriggeringPolicy size="100 MB" /></Policies><!-- 最多保留20個日志文件 --><DefaultRolloverStrategy max="20" /></RollingFile><RollingFile name="RollingFileInfo"fileName="E:/logs/info.log"filePattern="E:/logs/$${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log"><Filters><ThresholdFilter level="INFO" /><ThresholdFilter level="WARN" onMatch="DENY"onMismatch="NEUTRAL" /></Filters><!-- 輸出格式 --><PatternLayoutpattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" /><Policies><!-- SizeBasedTriggeringPolicy單個文件的大小限制 --><SizeBasedTriggeringPolicy size="100 MB" /></Policies><!-- DefaultRolloverStrategy同一個文件下的最大文件數 --><DefaultRolloverStrategy max="20" /></RollingFile><RollingFile name="RollingFileWarn"fileName="E:/logs/warn.log"filePattern="E:/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"><Filters><ThresholdFilter level="WARN" /><ThresholdFilter level="ERROR" onMatch="DENY"onMismatch="NEUTRAL" /></Filters><PatternLayoutpattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /><Policies><!--<TimeBasedTriggeringPolicy modulate="true" interval="1"/> --><SizeBasedTriggeringPolicy size="100 MB" /></Policies><!--最多保留20個日志文件 --><DefaultRolloverStrategy max="20" min="0" /></RollingFile><RollingFile name="RollingFileError"fileName="E:/logs/error.log"filePattern="E:/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"><Filters><ThresholdFilter level="ERROR" /><ThresholdFilter level="FATAL" onMatch="DENY"onMismatch="NEUTRAL" /></Filters><PatternLayoutpattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" /><Policies><!--<TimeBasedTriggeringPolicy modulate="true" interval="1"/> --><SizeBasedTriggeringPolicy size="100 MB" /></Policies><!--最多保留20個日志文件 --><DefaultRolloverStrategy max="20" min="0" /></RollingFile></appenders><loggers><root level="debug"><appender-ref ref="Console"/> <appender-ref ref="RollingFileDebug"/><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/></root> <logger name="org.springframework" level="error"></logger><logger name="org.mybatis.spring" level="error"></logger><logger name="org.apache.ibatis" level="error"></logger><!-- 下面是實現異步日志 --><!--過濾掉spring和mybatis的一些無用的debug信息 --><!-- <AsyncLogger name="org.springframework" level="error" includeLocation="true"><AppenderRef ref="RollingFileError"></AppenderRef></AsyncLogger><AsyncLogger name="org.mybatis" level="error" includeLocation="true"><AppenderRef ref="RollingFileError"></AppenderRef></AsyncLogger><AsyncLogger name="com.alibaba.druid" level="error"  includeLocation="true"><AppenderRef ref="RollingFileError"></AppenderRef></AsyncLogger><AsyncLogger name="org.apache.ibatis" level="error"  includeLocation="true"><AppenderRef ref="RollingFileError"></AppenderRef></AsyncLogger><AsyncRoot level="debug" includeLocation="true"><appender-ref ref="Console"/> <appender-ref ref="RollingFileDebug"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/><appender-ref ref="RollingFileFatal"/></AsyncRoot>  --></loggers>
</configuration>

使用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// 日志記錄,在需要做日志記錄的類上添加就可以了
private Logger l = LoggerFactory.getLogger(UinfoHandler.class);

Mybatis集成

  • 在SpringBoot中默認采用DataSourceAutoConfiguration來配置數據源(DataSource)。官方默認只需要在application配置文件中使用簡單的配置就可以連接數據庫。
  • 當加入了Druid-starter之后,它的DruidDataSourceAutoConfigure默認初始化了一個創建DataSource的方法。而這個DataSource默認就是讀取當前application配置文件中的spring.datasource.druid的值,由此創建了基于Druid的數據源

9bfff149ddf88bd99d635095b8fc8dec.png
在pom.xml添加依賴<!-- mybatis依賴,mybatis與spring整合-->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version>
</dependency>
<!--分頁啟動器-->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.12</version>
</dependency>配置java目錄下的配置資源掃描和逆向工程插件<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources><!--逆向工程插件--><plugins><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.34</version></dependency></dependencies><configuration><overwrite>true</overwrite><configurationFile>src/main/resources/generator.xml</configurationFile></configuration></plugin></plugins>
</build>
  • 配置數據庫連接信息
spring:datasource:name: mysql_testtype: com.alibaba.druid.pool.DruidDataSource#druid相關配置druid:#監控統計攔截的filtersfilters: statdriver-class-name: com.mysql.cj.jdbc.Driver#基本屬性url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=GMT%2B8&useSSL=falseusername: rootpassword: jiang110#配置初始化大小/最小/最大initial-size: 1min-idle: 1max-active: 20#獲取連接等待超時時間max-wait: 60000#間隔多久進行一次檢測,檢測需要關閉的空閑連接time-between-eviction-runs-millis: 60000#一個連接在池中最小生存的時間min-evictable-idle-time-millis: 300000validation-query: SELECT 'x'#空閑連接是否被回收test-while-idle: true#申請連接時是否檢測有效性test-on-borrow: false#歸還連接時是否檢測有效性test-on-return: false# 配置mybatis映射
mybatis:mapper-locations: classpath:io/jtxyh/webcrm/*/mapper/*.xmltype-aliases-package: io.jtxyh.webcrm
  • 啟動MapperScan掃描// 在主啟動類上加
    @MapperScan(basePackages = "io.jtxyh.webcrm.*.mapper") // 掃描mapper文件做映射

開啟注解式事務// 在主啟動類上加// 開啟事務結合@Transactional注解使用
@EnableTransactionManagement Redis集成

  • 添加redis啟動器
<!--redis整合-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions>
</dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version>
</dependency>
  • 配置redis
spring:redis:host: 127.0.0.1port: 6379password: root
  • redis使用
@Autowired
private StringRedisTemplate rt;
private String key = "uinfo:";@GetMapping("select/{uid}")
public Uinfo selectUinfoById(@PathVariable("uid") String uid){// 存儲到redis中ValueOperations<String, String> ops = rt.opsForValue();Uinfo uinfo = null;String redisKey = key+uid;String ouinfo = ops.get(redisKey);if(ouinfo == null){uinfo = us.selectByPrimaryKey(uid);ops.set(redisKey, JSON.toJSONString(uinfo));}else {uinfo = JSON.parseObject(ouinfo,Uinfo.class);}return uinfo;
}
  • redis默認使用了StringRedisTemplateRedisTemplate,做序列化存儲
    • StringRedisTemplate默認泛型都是String,默認采用string做序列化
    • RedisTemplate默認泛型都是Object,默認采用JDK做序列化
      • 可以重寫RedisTemplate方法,改變默認的序列方式
// 自定義RedisTemplate序列化方式
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {RedisTemplate<Object, Object> template = new RedisTemplate();template.setConnectionFactory(redisConnectionFactory);// 設置鍵的序列化方式為string序列化template.setKeySerializer(new StringRedisSerializer());// 設置值的序列化方式為fastJson序列化template.setKeySerializer(new GenericFastJsonRedisSerializer());// 設置hash的值的序列化方式為stringtemplate.setHashKeySerializer(new StringRedisSerializer());// 設置值的序列化方式為fastJson序列化template.setHashValueSerializer(new GenericFastJsonRedisSerializer());return template;
}
  • 注解式使用redis

Spring Boot?

e539a4c759cf4a2e7aed526a3f3d59a1.png
    1. 在啟動類上加**@EnableCaching**
    2. 在需要使用redis的類上使用注解
// 先去緩存找,找到返回,找不到查數據加入緩存
// 在查詢方法上加Cacheable注解,先去緩存中找userinfo:23的值,找到則返回,找不到執行方法,把方法返回值加入緩存。
// condition:方法執行之前的條件判斷
// unless:方法執行完后的條件判斷
@Cacheable(cacheNames = "userinfo",key = "#uid",unless = "#result==null")
public Uinfo getUserById(@PathVariable("uid") int uid){Uinfo sysuser = sm.selectByPrimaryKey(uid);return sysuser;
}// 用在刪改的方法上。當刪除和修改數據時,把緩存中對應數據刪除掉。
@GetMapping("/udel/{uid}")
@CacheEvict(cacheNames = "userinfo",key = "#uid")
public int delUserById(@PathVariable("uid") int uid){int rows = sm.deleteByPrimaryKey(uid);return rows;
}

定時任務

引入依賴<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
  • 在啟動類上加注解開啟定時任務
    @EnableScheduling // 開啟定時任務
  • 使用
@Component
public class MyQuery {// 每5分鐘執行一次@Scheduled(cron = "0 0/5 * * * ?")public void run(){System.out.println("定時任務執行了。。。。");}
}

兼容jsp

修改項目為打war包的格式<packaging>war</packaging>
<build><finalName>war包名稱</finalName>
</build>設置內置tomcat為provided<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>2.1.11.RELEASE</version><scope>provided</scope>
</dependency>加入jsp引擎,jstl支持<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope>
</dependency>
<dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId>
</dependency>
  • 創建webapp目錄
  • 創建繼承SpringBootServletInitializer類代替web.xml
//等價于web.xml
public class MyServletInit extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(Boot3Application.class);}
}

不拋出404頁面

spring:mvc:throw-exception-if-no-handler-found: trueresources:add-mappings: false

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/135879.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息