java mvc返回js_Java的学习(39)springboot
使用Spring boot ,可以轻松的创建独立运行的程序,非常容易构建独立的服务组件,是实现分布式架构、微服务架构利器。
Spring boot简化了第三方包的引用,通过提供的starter,简化了依赖包的配置
Spring boot的优点
轻松创建独立的Spring应用程序。
内嵌Tomcat、jetty等web容器,不需要部署WAR文件。
提供一系列的“starter” 来简化的Maven配置,不需要添加很多依赖。
开箱即用,尽可能自动配置Spring。
创建一个 maven war项目(test1)
创建一个 maven jar项目(test2)
在pom.xml添加spring-boot-starter-web依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
写一个控制器如下,然后写一个main方法,把程序跑起来:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController//相当于声明Controller - 提共restful 风格
@EnableAutoConfiguration//自动配置,不需要写spring的配置文件
class HelloController {@RequestMapping("/hello")//映射路径@ResponseBody//响应体public String hello() {return "Hello World";}public static void main(String[] args) {//启动程序SpringApplication.run(HelloController.class, args);}
}
在浏览器中访问http://localhost:8080/hello
![](/assets/blank.gif)
SpringBoot的启动方式
第一种:
在控制器配置EnableAutoConfiguration并使用SpringApplication启动程序
第二种【常用】
创建一个App类,在App类中配置EnableAutoConfiguration和组件扫描ComponentScan,
然后使用SpringApplication启动程序,这样就可以访问多个Controller了.
创建一个User控制器
![](/assets/blank.gif)
创建App类
![](/assets/blank.gif)
使用 Maven 命令“mvn dependency:tree”来查看项目实际的依赖
web开发
静态资源的访问
在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。
Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
/static
/public
/resources
/META-INF/resources
![](/assets/blank.gif)
自动返回json格式数据
![](/assets/blank.gif)
![](/assets/blank.gif)
全局捕获异常
@ExceptionHandler 表示拦截异常
@ControllerAdvice
controller 的一个辅助类,最常用的就是作为全局异常处理的切面类可以指定扫描范围
约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用
@ResponseBody 进行 json 转换
在com.gyf.web.exception包中定义一个全局异常类
@ControllerAdvice
在启动spring中,配置扫描包为com.gyf.web
![](/assets/blank.gif)
在某个映射的方法中添加个int i = 10/0的算术异常
![](/assets/blank.gif)
访问上的个路径结果为
![](/assets/blank.gif)
渲染Web页面
Freemarker的使用
在pom.xml中添加依赖
<!-- 引入freeMarker的依赖包. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
写个控制器,并返回些数据
![](/assets/blank.gif)
创建list.ftl文件
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
</head>
<body>欢迎${loginname}<#if age <= 17>小哥<#elseif age <= 30>先生<#else>大叔</#if>登录<table border="1"><tr><td>ID</td><td>名字</td><td>性别</td></tr><#list stuList?sort_by("id")?reverse as stu><tr><td> ${stu.id}</td><td> ${stu.name}</td><td> ${stu.gender}</td></tr></#list></table>
</body>
</html>
SpringBoot 使用jsp
pom文件引入以下依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.3.3.RELEASE</version></parent><dependencies><!-- SpringBoot 核心组件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></dependency><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId></dependency></dependencies>
application.properties创建以下配置
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
控制器代码
![](/assets/blank.gif)
jsp
![](/assets/blank.gif)
数据库访问
SpringBoot使用JDBC
添加依赖
<!-- JDBC --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></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>
application.properties新增配置
#视图配置
spring.mvc.view.prefix=/WEB-INF/view/
spring.mvc.view.suffix=.jsp
#数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/day12
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Service
![](/assets/blank.gif)
Controller
![](/assets/blank.gif)
App
![](/assets/blank.gif)
使用Mybatis
pom导入
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.3.2.RELEASE</version><relativePath /> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- 单元测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- mybaties --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.1.1</version></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency></dependencies>
数据库配置文件
![](/assets/blank.gif)
Mapper
![](/assets/blank.gif)
如果不使用注释则换成xml形式,将这个放入Maper包中
<?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="com.gyf.mapper.UserMapper" ><insert id="save">insert into t_user (username,password) VALUES(#{0},#{1})</insert><select id="findByUsername" resultType="com.gyf.model.User" parameterType="string">select * from t_user where username = #{username,jdbcType=VARCHAR}</select>
</mapper>
并在pom中添加下面代码
<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource></resources>
</build>
Controller
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 com.gyf.mapper.UserMapper;
import com.gyf.model.User;@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserMapper userMapper;@RequestMapping("/find")@ResponseBodypublic User find(String name){return userMapper.findByName(name);}@ResponseBody@RequestMapping("/add")public int add(String name){return userMapper.insert(name,"e10adc3949ba59abbe56e057f20f883e");}
}
APP
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;@ComponentScan(basePackages={"com.gyf.controller"})
@MapperScan(basePackages={"com.gyf.mapper"})//扫描Mapper
@EnableAutoConfiguration
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}
spring中使用的事务
只需要加个Transactional注解即可
![](/assets/blank.gif)
配置多数据源
配置文件中新增两个数据源
spring.datasource.test1.driverClassName=com.mysql.jdbc.Driver
spring.datasource.test1.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8
spring.datasource.test1.username=root
spring.datasource.test1.password=123456spring.datasource.test2.driverClassName=com.mysql.jdbc.Driver
spring.datasource.test2.url=jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8
spring.datasource.test2.username=root
spring.datasource.test2.password=123456
建表语句
use test1;
CREATE table user(id int PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50),password VARCHAR(50),email VARCHAR(50),birthday TIMESTAMP
);use test2;
CREATE table customer(id int PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),tel VARCHAR(50)
);
写两个数据源配置(注意:Primary注释只能配给一个数据源)
DataSource01
@Configuration
DataSource02
@Configuration
test1 Mapper&service
![](/assets/blank.gif)
![](/assets/blank.gif)
test2 mapper & service
![](/assets/blank.gif)
![](/assets/blank.gif)
Controller
![](/assets/blank.gif)
App
![](/assets/blank.gif)
多数据源问题(customer表会插入数据)
Transactoinal的事务只针对userMapper有效
![](/assets/blank.gif)
springboot中的多事务管理(解决多数据源事务问题)
添加jta事务依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jta-atomikos</artifactId></dependency>
修改数据库连接配置数据
# Mysql 1
mysql.datasource.test1.url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8
mysql.datasource.test1.username = root
mysql.datasource.test1.password = 123456mysql.datasource.test1.minPoolSize = 3
mysql.datasource.test1.maxPoolSize = 25
mysql.datasource.test1.maxLifetime = 20000
mysql.datasource.test1.borrowConnectionTimeout = 30
mysql.datasource.test1.loginTimeout = 30
mysql.datasource.test1.maintenanceInterval = 60
mysql.datasource.test1.maxIdleTime = 60mysql.datasource.test1.testQuery = select 1
# Mysql 2
mysql.datasource.test2.url =jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8
mysql.datasource.test2.username =root
mysql.datasource.test2.password =123456
mysql.datasource.test2.minPoolSize = 3
mysql.datasource.test2.maxPoolSize = 25
mysql.datasource.test2.maxLifetime = 20000
mysql.datasource.test2.borrowConnectionTimeout = 30
mysql.datasource.test2.loginTimeout = 30
mysql.datasource.test2.maintenanceInterval = 60
mysql.datasource.test2.maxIdleTime = 60
mysql.datasource.test2.testQuery = select 1
添加2个配置模型
模型放在com.gyf.dbconfig包(并添加get,set方法)
@ConfigurationProperties
两个数据源配置
DataSource01
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import com.atomikos.jdbc.AtomikosDataSourceBean;
import com.gyf.dbconfig.DBConfig1;
import com.mysql.jdbc.jdbc2.optional.MysqlXADataSource;@Configuration//注解到springboot容器中
@MapperScan(basePackages="com.gyf.test1.mapper",sqlSessionFactoryRef="test1SqlSessionFactory")
public class DataSource01 {// 配置数据源@Primary@Bean(name = "test1DataSource")public DataSource testDataSource(DBConfig1 testConfig) throws SQLException {MysqlXADataSource mysqlXaDataSource = new MysqlXADataSource();mysqlXaDataSource.setUrl(testConfig.getUrl());mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true);mysqlXaDataSource.setPassword(testConfig.getPassword());mysqlXaDataSource.setUser(testConfig.getUsername());mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true);AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();xaDataSource.setXaDataSource(mysqlXaDataSource);xaDataSource.setUniqueResourceName("test1DataSource");xaDataSource.setMinPoolSize(testConfig.getMinPoolSize());xaDataSource.setMaxPoolSize(testConfig.getMaxPoolSize());xaDataSource.setMaxLifetime(testConfig.getMaxLifetime());xaDataSource.setBorrowConnectionTimeout(testConfig.getBorrowConnectionTimeout());xaDataSource.setLoginTimeout(testConfig.getLoginTimeout());xaDataSource.setMaintenanceInterval(testConfig.getMaintenanceInterval());xaDataSource.setMaxIdleTime(testConfig.getMaxIdleTime());xaDataSource.setTestQuery(testConfig.getTestQuery());return xaDataSource;}@Bean(name = "test1SqlSessionFactory")public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource)throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);return bean.getObject();}@Bean(name = "test1SqlSessionTemplate")public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}
}
DataSource02
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import com.atomikos.jdbc.AtomikosDataSourceBean;
import com.gyf.dbconfig.DBConfig2;
import com.mysql.jdbc.jdbc2.optional.MysqlXADataSource;@Configuration//注解到springboot容器中
@MapperScan(basePackages="com.gyf.test2.mapper",sqlSessionFactoryRef="test2SqlSessionFactory")
public class DataSource02 {// 配置数据源@Bean(name = "test2DataSource")public DataSource testDataSource(DBConfig2 testConfig) throws SQLException {MysqlXADataSource mysqlXaDataSource = new MysqlXADataSource();mysqlXaDataSource.setUrl(testConfig.getUrl());mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true);mysqlXaDataSource.setPassword(testConfig.getPassword());mysqlXaDataSource.setUser(testConfig.getUsername());mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true);AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean();xaDataSource.setXaDataSource(mysqlXaDataSource);xaDataSource.setUniqueResourceName("test2DataSource");xaDataSource.setMinPoolSize(testConfig.getMinPoolSize());xaDataSource.setMaxPoolSize(testConfig.getMaxPoolSize());xaDataSource.setMaxLifetime(testConfig.getMaxLifetime());xaDataSource.setBorrowConnectionTimeout(testConfig.getBorrowConnectionTimeout());xaDataSource.setLoginTimeout(testConfig.getLoginTimeout());xaDataSource.setMaintenanceInterval(testConfig.getMaintenanceInterval());xaDataSource.setMaxIdleTime(testConfig.getMaxIdleTime());xaDataSource.setTestQuery(testConfig.getTestQuery());return xaDataSource;}@Bean(name = "test2SqlSessionFactory")public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource)throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);return bean.getObject();}@Bean(name = "test2SqlSessionTemplate")public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}
}
App
![](/assets/blank.gif)
整合Log4j(日志)
log4j.properties
注意,复制时要把每一行后面的空格去除
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 = C:/Users/10301/Desktop/test/logs/info/info.log
log4j.appender.File.MaxFileSize = 10MB log4j.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
pom.xml
去除springboot的logging,添加log4j,因为自带的logging不启效果
springboot下的Log4j的版本最新1.3.8,如果你的springboot的parent版本过高,那在在添加log4j自己版本
![](/assets/blank.gif)
测试
![](/assets/blank.gif)
使用AOP统一处理Web请求日志
pom
<!-- AOP --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>
写个切面类
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;
@Aspect
@Component
public class WebLogAspect {private Logger logger = Logger.getLogger(getClass());@Pointcut("execution(public * com.gyf.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);}
}
App配置注解
![](/assets/blank.gif)
修改端口号
在application.properties中
server.port=8888
server.context-path=/test
![](/assets/blank.gif)
在application.yml中
注意冒号后的只能用空格,不能用tab
server:port: 8090context-path: /test-yml
Springboot 打包部署
打包时添加下面依赖代码
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>com.gyf.app.App</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
cmd使用 mvn clean install 打成war包或者jar包
使用java -jar test3-0.0.1-SNAPSHOT.jar 运行即可
在终端要停止服务器时,使用Ctrl + C,直接点x,会端口没有关掉
使用连接池
添加druid的连接池
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.25</version>
</dependency>
添加application.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url = jdbc:mysql://localhost:3306/edu1?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
使用注解来配置数据源
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;}
}
在Application.properties添加
#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
页面引用js/jpg/css
![](/assets/blank.gif)
打包添加
<resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></resource>
</resources>
java mvc返回js_Java的学习(39)springboot相关推荐
- java mvc返回js_技术趋势:是什么让MVC悄然消失的?
投身IT江湖,就像打王者荣耀一样,好不容易练会了一个硬性,结果天美把它削弱了,你不得不再去练习一个. MVC这门技术伴随着我的成长,感情和Java一样深厚,但是,最近两年却不得不和MVC说再见了.是的 ...
- java 内部类 返回值_Java学习笔记:形参和返回值、内部类、常用API
形参和返回值 类名作形参 public void useCat(Cat c){ c.eat(); } CatOperator co=new CatOperator(); Cat c=new Cat() ...
- 深圳Java培训学习:SpringBoot的yml配置及多环境切换【千锋】
深圳Java培训学习:SpringBoot的yml配置及多环境切换[千锋] 1,配置风格 从application.properties转换到application.yml 并不改变功能效果,只是改变 ...
- java去除json 转移,Spring MVC返回的json去除根节点名称的方法
这篇文章主要介绍了Spring MVC返回的json去除根节点名称的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 spring xml中配置视图如果是如下 那么返回结果会是: {" ...
- java json 返回null,[] Spring4 MVC 返回json格式时候 设置不返回null值属性的有关问题...
[求助] Spring4 MVC 返回json格式时候 设置不返回null值属性的问题 本帖最后由 bighong0404 于 2015-10-06 12:45:38 编辑 背景: 使用@respon ...
- knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案
knife4j knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一样小巧,轻量, ...
- JAVA计算机毕业设计中国古诗词学习平台Mybatis+源码+数据库+lw文档+系统+调试部署
JAVA计算机毕业设计中国古诗词学习平台Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计中国古诗词学习平台Mybatis+源码+数据库+lw文档+系统+调试部署 本源码技 ...
- Java MVC框架性能比较
Java MVC框架性能比较 - by zvane 现在各种MVC框架很多,各框架的优缺点网络上也有很多的参考文章,但介绍各框架性能方面差别的文章却不多,本人在项目开发中,感觉到采用了struts2框 ...
- 基于Java毕业设计智友少儿编程学习平台源码+系统+mysql+lw文档+部署软件
基于Java毕业设计智友少儿编程学习平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计智友少儿编程学习平台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S ...
最新文章
- linux 检查 文件末尾 是否有空行
- java对象 Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
- 公共基础知识计算机,公共基础知识计算机基础知识试题
- Android USB Gadget复合设备驱动(打印机)测试方法
- easyGUI 用法介绍
- FC-SAN和IP-SAN以及NAS两者的优缺点分别是什么?
- 写给萌新,聊聊你初入职场的那些疑惑~
- Python SQLAlchemy --3
- 通过shell访问hive_【HIVE】SHELL调用Hive查询
- IDEA2020的中文插件_IDEA2020个性化设置(装逼且实用)
- Windows请求连接 Vmware+Ubuntu14被拒绝 的幽怨诉说
- 数组模拟加法(每日一练 11.30)
- iOS导航控制器和Segues
- 剖析WordPress模板文件【转】
- 为socket的recv/send设置超时
- 如何在腾讯云搭建自己的网站
- Electron 屏幕锁定 快捷键锁定 屏蔽快捷键
- 物联网应用技术和计算机应用技术哪个更好,2020物联网应用技术专业选什么大学好?...
- 在日本的软件工程师之路
- 计算机图形学【GAMES-101】10、材质(BRDF)(折射、菲涅尔项、微表面模型、各向异性材质)
热门文章
- MongoDB学习笔记(三)使用Spring Data操作MongoDB
- mysql数据库latin1转utf8_三种转换Mysql数据库数据编码的窍门-latin1转utf8
- PAT甲级 -- 1050 String Subtraction (20 分)
- 极简代码:害死人不偿命的(3n+1)猜想 (15分)
- java 日期是否合法_java 中 Date 类型快判断日期是否合法.
- oracle 换行符_python实现自动化报表(Oracle/plsql/Excel/多线程)
- linux如何分析系统的堆栈,Linux内核分析:操作系统是如何工作的?
- mysql安装1335_Mysql 安装问题。提示MySQL Server 5.1 -- Error 1335.
- KEY键盘映射_手焊键盘,使用Python编写,一键放连招,还有什么你不会
- python list 查找find_List 泛型 集合中 Find 的用法