日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot和FreeMarker整合

發布時間:2025/5/22 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot和FreeMarker整合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 使用工具
  • 環境搭建
  • 代碼示例
    • java目錄
      • WebLogAspect.java
      • DruidDBConfig.java
      • UserMapper.java
      • User.java
      • UserServiceImpl.java
      • IUserService.java
      • UserController.java
      • App.java
    • resources目錄
      • application.properties 配置
      • log4j.properties 配置
      • application.yml 配置
      • UserMapper.xml
      • list.ftl
    • pom.xml配置
  • 效果展示

使用工具

IDEA2018.2 MySQL5.6 JDK1.8

環境搭建



代碼示例

java目錄

WebLogAspect.java

package net.zjitc.aspect;import java.util.Enumeration;import javax.servlet.http.HttpServletRequest;import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes;/*** @Author ??VVcat??* @Date 2019/8/30 21:14* @Version 1.0**/@Aspect // 使用@Aspect注解聲明一個切面 @Component //配置bean public class WebLogAspect {private Logger logger = Logger.getLogger(getClass());@Pointcut("execution(public * net.zjitc.web.controller..*.*(..))")public void webLog() {}@Before("webLog()")public void doBefore(JoinPoint joinPoint) throws Throwable {// 接收到請求,記錄請求內容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 記錄下請求內容logger.info("---------------request----------------");logger.info("URL : " + request.getRequestURL().toString());logger.info("HTTP_METHOD : " + request.getMethod());logger.info("IP : " + request.getRemoteAddr());Enumeration<String> enu = request.getParameterNames();while (enu.hasMoreElements()) {String name = (String) enu.nextElement();logger.info("name:" + name + "value" + request.getParameter(name));}}@AfterReturning(returning = "ret", pointcut = "webLog()")public void doAfterReturning(Object ret) throws Throwable {logger.info("---------------response----------------");// 處理完請求,返回內容logger.info("RESPONSE : " + ret);} }

DruidDBConfig.java

package net.zjitc.dbconfig;/*** @Author ??VVcat??* @Date 2019/8/31 10:43* @Version 1.0**/ import com.alibaba.druid.pool.DruidDataSource; import org.apache.log4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary;import javax.sql.DataSource; import java.sql.SQLException;@Configuration public class DruidDBConfig {private Logger logger = Logger.getLogger(DruidDBConfig.class);@Value("${spring.datasource.url}")private String dbUrl;@Value("${spring.datasource.username}")private String username;@Value("${spring.datasource.password}")private String password;@Value("${spring.datasource.driverClassName}")private String driverClassName;@Value("${spring.datasource.initialSize}")private int initialSize;@Value("${spring.datasource.minIdle}")private int minIdle;@Value("${spring.datasource.maxActive}")private int maxActive;@Value("${spring.datasource.maxWait}")private int maxWait;@Value("${spring.datasource.timeBetweenEvictionRunsMillis}")private int timeBetweenEvictionRunsMillis;@Value("${spring.datasource.minEvictableIdleTimeMillis}")private int minEvictableIdleTimeMillis;@Value("${spring.datasource.validationQuery}")private String validationQuery;@Value("${spring.datasource.testWhileIdle}")private boolean testWhileIdle;@Value("${spring.datasource.testOnBorrow}")private boolean testOnBorrow;@Value("${spring.datasource.testOnReturn}")private boolean testOnReturn;@Value("${spring.datasource.poolPreparedStatements}")private boolean poolPreparedStatements;@Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")private int maxPoolPreparedStatementPerConnectionSize;@Value("${spring.datasource.filters}")private String filters;@Value("{spring.datasource.connectionProperties}")private String connectionProperties;@Bean //聲明其為Bean實例@Primary //在同樣的DataSource中,首先使用被標注的DataSourcepublic DataSource dataSource(){DruidDataSource datasource = new DruidDataSource();datasource.setUrl(this.dbUrl);datasource.setUsername(username);datasource.setPassword(password);datasource.setDriverClassName(driverClassName);//configurationdatasource.setInitialSize(initialSize);datasource.setMinIdle(minIdle);datasource.setMaxActive(maxActive);datasource.setMaxWait(maxWait);datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);datasource.setValidationQuery(validationQuery);datasource.setTestWhileIdle(testWhileIdle);datasource.setTestOnBorrow(testOnBorrow);datasource.setTestOnReturn(testOnReturn);datasource.setPoolPreparedStatements(poolPreparedStatements);datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);try {datasource.setFilters(filters);} catch (SQLException e) {logger.error("druid configuration initialization filter", e);}datasource.setConnectionProperties(connectionProperties);return datasource;} }

UserMapper.java

package net.zjitc.mapper;import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select;/*** @Author ??VVcat??* @Date 2019/8/30 10:55* @Version 1.0**/ public interface UserMapper {}

User.java

package net.zjitc.model;/*** @Author ??VVcat??* @Date 2019/8/29 18:37* @Version 1.0**/ public class User {}

UserServiceImpl.java

package net.zjitc.service.impl;import net.zjitc.mapper.UserMapper; import net.zjitc.service.IUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional;/*** @Author ??VVcat??* @Date 2019/8/29 23:55* @Version 1.0**/ @Service //service組件 @Transactional public class UserServiceImpl implements IUserService {@Autowired // 自動注入private UserMapper userMapper;}

IUserService.java

package net.zjitc.service;/*** @Author ??VVcat??* @Date 2019/8/29 23:55* @Version 1.0**/ public interface IUserService {}

UserController.java

package net.zjitc.web.controller;import net.zjitc.service.IUserService; import net.zjitc.service.impl.UserServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController;/*** @Author ??VVcat??* @Date 2019/8/29 18:40* @Version 1.0***/@Controller//相當于聲明Controller - 提共restful 風格 控制器 @RequestMapping("user") public class UserController {@Autowiredprivate IUserService userService;@RequestMapping("login")public String login(){return "user/list";}}

App.java

package net.zjitc;import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.ComponentScan;/*** Hello world!**/@EnableAutoConfiguration //自動配置,不需要寫spring的配置文件 //@ComponentScan(basePackages = {"net.zjitc.datasource","net.zjitc.test1","net.zjitc.test2","net.zjitc.web"}) //還可以這樣寫 @ComponentScan(basePackages = "net.zjitc") @MapperScan(basePackages = "net.zjitc.mapper") public class App {public static void main( String[] args ){//啟動springboot項目SpringApplication.run(App.class, args);} // 啟動訪問網址:http://localhost:8080/test/user/login }

resources目錄

application.properties 配置

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driverClassName=com.mysql.jdbc.Driver#連接池的配置信息 spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 spring.datasource.maxWait=60000 spring.datasource.timeBetweenEvictionRunsMillis=60000 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=SELECT 1 FROM DUAL spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false spring.datasource.poolPreparedStatements=true spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 spring.datasource.filters=stat,wall,log4j spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000#spring.freemarker.suffix=.ftl #spring.freemarker.templateEncoding=UTF-8 #spring.freemarker.templateLoaderPath=classpath:/templates/ #spring.freemarker.content-type=text/html spring.freemarker.request-context-attribute=request

log4j.properties 配置

log4j.appender.File.File = 自己設置緩存地址
info.log 為文件名和文件后綴格式

log4j.rootLogger=INFO,Console,File log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out log4j.appender.Console.layout = org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c - %L]%m%nlog4j.appender.File = org.apache.log4j.RollingFileAppender #自己設置緩存地址 log4j.appender.File.File = E:/JAVA/JAVAEE/info.log #設置文件的緩存大小 log4j.appender.File.MaxFileSize = 10MBlog4j.appender.File.Threshold = ALL log4j.appender.File.layout = org.apache.log4j.PatternLayout log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c - %L]%m%n

application.yml 配置

# 注意冒號后的只能用空格,不能用tab server: # 修改端口號port: 8080 # 修改路徑context-path: /test

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="net.zjitc.mapper.UserMapper" ></mapper>

list.ftl

<!DOCTYPE html> <!--*@Author ??VVcat??*Date 2019/8/29 22:14 --> <html lang="en"> <head><meta charset="UTF-8"> </head> <body> Hello World!!! </table> </body></html>

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>net.zjitc</groupId><artifactId>Demo</artifactId><version>1.0-SNAPSHOT</version><name>Demo</name><!--spring boot 父依賴--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.7</maven.compiler.source><maven.compiler.target>1.7</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--spring boot配置web的依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 引入freeMarker的依賴包. --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency><!-- mybaties --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.1.1</version></dependency><!--阿里巴巴數據庫連接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.25</version></dependency><!-- 數據庫驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--單元測試--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 添加jta事務依賴 jta 管理多個數據源的事務--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jta-atomikos</artifactId></dependency><!--排除springboot自帶的logging 日志--><!-- 去除springboot的logging,添加log4j,因為自帶的logging不啟效果--><!-- springboot下的Log4j的版本最新1.3.8,如果你的springboot的parent版本過高,那在在添加log4j自己版本--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!--重新導入log4j--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j</artifactId><version>1.3.8.RELEASE</version></dependency><!-- AOP --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.9</version></dependency></dependencies><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></resource></resources></build> </project>

效果展示

總結

以上是生活随笔為你收集整理的SpringBoot和FreeMarker整合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。