springBoot按照開發習慣對原來的xml配置提供了預配置,開發人員使用springBoot框架,不用再手工配置xml
boot怎么進入,springBoot按包依賴習慣,提供了各個常用模塊的依賴啟動器starter,
src/main/java/*Application:啟動類,主類
src/main/resources/static:靜態資源路徑(css/js/圖片/視頻。。。純靜態資源)
src/main/resources/templates:視圖模板文件。(html加thymeleaf模板引擎)
bootmode。src/main/resources/application.properties:項目核心配置文件。改默認配置的地方
父工程:項目有兩個父工程,管理了jdk版本,管理了maven的resources配置,管理了常用依賴的版本.
jdk版本:重寫父工程的java.version.重新制定jdk版本
dependency依賴:配置啟動器依賴。
java start,spring-boot-maven-plugin打包插件:打jar包的插件,配置啟動類位置
jar包運行:java -jar jar包名稱
war包運行:為了tomcat調優,或者不用tomcat,需要打war包
<packaging>war</packaging>
<build><finalName>war包名稱</finalName>
</build>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>
</dependency>
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);}
}
public static void main(String[] args) {SpringApplication.run(WebcrmApplication.class, args);}"啟動tomcat,filter,listener,啟動標志,啟動日志"
@Value注解
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;
在resources下添加banner.txt,自動加載
在resources/resources或resources/static或resources/public或/下自定義一個index.html文件,優先級由高到低
在靜態資源路徑下放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/");}
}
{"timestamp": "2019-12-20T02:27:45.856+0000", "status": 404, "error": "Not Found", "message": "No message available", "path": "/page"
}
Springboot教程,
自定義異常處理
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);
在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
開啟注解式事務// 在主啟動類上加// 開啟事務結合@Transactional注解使用
@EnableTransactionManagement 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>
spring:redis:host: 127.0.0.1port: 6379password: root
@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;
}
// 自定義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;
}
Spring Boot?
// 先去緩存找,找到返回,找不到查數據加入緩存
// 在查詢方法上加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>
@Component
public class MyQuery {// 每5分鐘執行一次@Scheduled(cron = "0 0/5 * * * ?")public void run(){System.out.println("定時任務執行了。。。。");}
}
修改項目為打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>
//等價于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
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态