spring boot 整合 freemark(簡單結構)
阿新 • • 發佈:2018-12-08
一、建立Mean 專案 這個就不多說了
二、我的spring boot demo 結構 如下:
三、主要的配置檔案(application.properties ;pom.xml ; log4j2.xml)
(1、)application.properties 檔案
#server server.port=8888 server.session-timeout=30 server.tomcat.uri-encoding=UTF-8 #datasource spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.url=jdbc:mysql://localhost:3306/studentmanage?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&failOverReadOnly=false spring.datasource.username=root spring.datasource.password=12 spring.datasource.driver-class-name=com.mysql.jdbc.Driver # 下面為連線池的補充設定,應用到上面所有資料來源中# 初始化大小,最小,最大 spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=150 # 配置獲取連線等待超時的時間 spring.datasource.maxWait=0 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒 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 # 開啟PSCache,並且指定每個連線上PSCache的大小 spring.datasource.poolPreparedStatements=true spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 # 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆 spring.datasource.filters=stat,wall # 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 #jap spring.jpa.properties.hibernate.hbm2ddl.auto=update #spring.jpa.show-sql=true #上傳大小配置 spring.http.multipart.max-file-size=30Mb spring.http.multipart.max-request-size=30Mb #FreeMarker FREEMARKER (FreeMarkerAutoConfiguration) spring.freemarker.allow-request-override=false spring.freemarker.allow-session-override=false spring.freemarker.cache=true spring.freemarker.charset=UTF-8 spring.freemarker.check-template-location=true spring.freemarker.content-type=text/html spring.freemarker.enabled=true spring.freemarker.expose-request-attributes=true spring.freemarker.expose-session-attributes=true spring.freemarker.expose-spring-macro-helpers=true spring.freemarker.request-context-attribute=request spring.freemarker.prefer-file-system-access=true spring.freemarker.suffix=.ftl spring.freemarker.template-loader-path=classpath:/templates/ spring.freemarker.settings.template_update_delay=0 spring.freemarker.settings.default_encoding=UTF-8 spring.freemarker.settings.number_format=0.########## spring.freemarker.settings.datetime_format=yyyy-MM-dd HH:mm:ss spring.freemarker.settings.classic_compatible=true spring.freemarker.settings.template_exception_handler=ignore spring.freemarker.order=1 #log logging.config=classpath:log4j2.xml
(2 、)pom.xml 檔案
<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>com.myspringboot</groupId> <artifactId>myspringboot</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <description>myspringboot</description> <!-- 繼承父包 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> <relativePath></relativePath> </parent> <properties> <alibaba.druid.version>1.0.23</alibaba.druid.version> <alibaba.fastjson.version>1.2.18</alibaba.fastjson.version> <mybatis.version>1.1.1</mybatis.version> <apache.commons-lang.version>3.2.1</apache.commons-lang.version> <apache.commons-io.version>2.5</apache.commons-io.version> <thumbnailator.version>0.4.8</thumbnailator.version> <apache.poi.version>3.14</apache.poi.version> <java.version>1.7</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- spring-boot的web啟動的jar包 --> <dependencies> <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> <!-- Log4j2 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--jpa的jar包 ,操作資料庫的,類似hibernate --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--測試包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.3.4</version> </dependency> <!--mysql驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- 阿里巴巴連線池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${alibaba.druid.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${alibaba.fastjson.version}</version> </dependency> <!--freemarker --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${apache.commons-lang.version}</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${apache.commons-io.version}</version> </dependency> <!-- Exceld工具包 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>${apache.poi.version}</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>${apache.poi.version}</version> </dependency> <!-- 圖片壓縮 --> <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>${thumbnailator.version}</version> </dependency> </dependencies> <!--maven的外掛 --> <build> <finalName>myspringboot</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <!-- 配置java版本 不配置的話預設父類配置的是1.6 --> <pluginManagement> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/2002/xmlspec/dtd/2.10/xmlspec.dtd"> <Configuration status="off"> <!-- 日誌檔案目錄和壓縮檔案 --> <Properties> <Property name="fileName">/tmp/logs</Property> <Property name="fileGz">/tmp/logs/7z</Property> </Properties> <Appenders> <!--這個輸出控制檯的配置 --> <Console name="console" target="SYSTEM_OUT"> <!--控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch) --> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="NEUTRAL" /> <!--輸出日誌的格式 --> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} %L %M - %msg%xEx%n" /> </Console> <!--這個會打印出所有的資訊,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的資料夾下面並進行壓縮,作為存檔 --> <RollingRandomAccessFile name="rollingInfoFile" fileName="${fileName}/springboot-info.log" immediateFlush="false" filePattern="${fileGz}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.springboot-info.gz"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} [%t] %-5level %logger{36} %L %M - %msg%xEx%n" /> <Policies> <TimeBasedTriggeringPolicy interval="6" modulate="true" /> <SizeBasedTriggeringPolicy size="50 MB"/> </Policies> <Filters> <!-- 只記錄info級別資訊 --> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY" /> </Filters> <!-- 指定每天的最大壓縮包個數,預設7個,超過了會覆蓋之前的 --> <DefaultRolloverStrategy max="50"/> </RollingRandomAccessFile> <RollingRandomAccessFile name="rollingErrorFile" fileName="${fileName}/springboot-error.log" immediateFlush="false" filePattern="${fileGz}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.springboot-error.gz"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} [%t] %-5level %logger{36} %L %M - %msg%xEx%n" /> <Policies> <TimeBasedTriggeringPolicy interval="6" modulate="true" /> <SizeBasedTriggeringPolicy size="50 MB"/> </Policies> <Filters> <!-- 只記錄error級別資訊 --> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" /> </Filters> <!-- 指定每天的最大壓縮包個數,預設7個,超過了會覆蓋之前的 --> <DefaultRolloverStrategy max="50"/> </RollingRandomAccessFile> <!-- <JDBC name="databaseAppender" tableName="sys_log"> <ConnectionFactory class="com.blog.config.ConnectionFactory" method="getDatabaseConnection" /> <Column name="date" isEventTimestamp="true"/> <Column name="file" pattern="%file" /> <Column name="line" pattern="%line" /> <Column name="thread" pattern="%thread" /> <Column name="level" pattern="%level" /> <Column name="message" pattern="%message"/> </JDBC> --> </Appenders> <Loggers> <!-- 全域性配置,預設所有的Logger都繼承此配置 --> <AsyncRoot level="info" additivity="false"> <AppenderRef ref="console"/> <AppenderRef ref="rollingInfoFile"/> <AppenderRef ref="rollingErrorFile"/> <!-- <AppenderRef ref="databaseAppender" level="warn" /> --> </AsyncRoot> </Loggers> </Configuration>
(4、程式主入口)
package com.myspringboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
/**
* @ClassName: Application
* @Description:專案啟動入口
*/
//@EnableCaching //快取
//@EnableScheduling //定時任務
//@EnableAsync //非同步任務
@SpringBootApplication // 專案啟動
//@ComponentScan("com.myspringboot")
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(this.getClass());
}
}
(5、)控制器
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
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.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.myspringboot.model.StudentBasis;
import com.myspringboot.service.StudentBasisService;
@Controller
@RequestMapping(value = "/")
@ResponseBody
public class StudentController {
@Autowired
private StudentBasisService studentService;
@RequestMapping(value = "Student/index.html", method = RequestMethod.GET)
public ModelAndView getStudentIndex(HttpServletRequest request) throws Exception {
ModelAndView mv = new ModelAndView("/student/index");
List<StudentBasis> list = new ArrayList<StudentBasis>();
Map<String, Object> whereMap = new HashMap<String, Object>();
list = studentService.getList(whereMap);
System.out.println("獲取列表成功!");
mv.addObject("studentlist", list);
return mv;
}
}
(6、)前臺頁面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<#assign boot = basePath >
<html>
<head>
<title>學生列表</title>
<base href="${boot}/" />
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<link type="text/css" rel="stylesheet" href="${boot}/public/css/base.css" />
<link type="text/css" rel="stylesheet" href="${boot}/public/css/master.css" />
<script type="text/javascript" language="javascript" src="${boot}/public/js/jquery-2.2.1.min.js"></script>
</head>
<body>
<table class="week_pro">
<tr>
<th>學生學號</th>
<th>學生姓名</th>
<th>手機號碼</th>
<th>電子郵件</th>
<th style="width: 80px;">性別</th>
<th style="width: 120px;">操作</th>
</tr>
<#if (studentlist?? && studentlist?size>0)>
<#list studentlist as data>
<tr>
<td>${data.studentcode}</td>
<td>${data.studentname}</td>
<td>${data.mobile}</td>
<td>${data.email}</td>
<td></td>
<td><a class="btn_link" id='${data.id}'>修改</a>
</td>
</tr>
</#list>
</#if>
</table>
</body>
</html>
(7、)如果在前臺頁面 要想與jsp 那樣獲取
request.getContextPath() 的效果
需要重新定義 攔截器類和註冊類:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* 攔截器類
* @author Michael
*
*/
public class CommonInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o)
throws Exception {
String path = httpServletRequest.getContextPath();
String scheme = httpServletRequest.getScheme();
String serverName = httpServletRequest.getServerName();
int port = httpServletRequest.getServerPort();
String basePath = scheme + "://" + serverName + ":" + port + path;
httpServletRequest.setAttribute("basePath", basePath);
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o,
ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
Object o, Exception e) throws Exception {
}
}
註冊類:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* 註冊類
* @author Michael
*
*/
@Configuration
public class CommonInterceptorConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CommonInterceptor()).addPathPatterns("/**");
}
}
前臺頁面引用如下: