如果大家觉得好,请关注我的头条号!
什么是springboot?
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
特点:
1. 创建独立的Spring应用程序
2. 嵌入的Tomcat,无需部署WAR文件
3. 简化Maven配置
4. 自动配置Spring
5. 提供生产就绪型功能,如指标,健康检查和外部配置
6. 绝对没有代码生成和对XML没有要求配置
springboot入门
创建maven工程,添加springboot依赖
<!-- springboot依赖jar --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.8.RELEASE</version> </dependency>
配置springboot入口类
package com.fyd; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author fyd * @description springboot的入口类 * 2017-12-27上午9:44:47 */ @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
常见问题一:
错误: 找不到或无法加载主类 com.aaa.MyApplication
解决方法
<!-- springboot编译插件 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
成功图标
修改启动图标
1.在src/main/resources下新建一个banner.txt文档
2.通过http://patorjk.com/software/taag网站生成需要的字符
使用springboot配置controller
创建cotroller
package com.fyd.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @author fyd * @description 普通控制器 * 2017-12-27上午10:30:29 */ @Controller @RequestMapping("/hello") public class HeolloWorld { @RequestMapping("/hahaha") public String firstBoot() { System.out.println("aaaaaaaaaaaaaaa"); return "aaa";//跳转到aaa.jsp } }
添加springboot系统配置文件application.properties
#配置服务端口号 server.port=9090 #配置项目名称 server.CONTEXT_PATH=/qqq #配置springmvc的前缀和后缀 spring.mvc.view.prefix=/WEB-INF/view/ spring.mvc.view.suffix=.jsp
测试
常见问题:
找不到jsp的错误Whitelabel Error Page
解决方法:
<dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>8.5.24</version> <scope>provided</scope> </dependency>
springboot注入bean属性
编写属性文件*.properties
stu.stuId=2000 stu.stuName=hemukun stu.sex=女
编写实体类,并依靠注解注入属性
package com.fyd.entity; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; /** * @author fyd * @description 学生实体类 * 2017-12-27上午11:06:36 */ @Component @ConfigurationProperties(prefix="stu") @PropertySource("classpath:stu.properties") public class Student { private Integer stuId; private String stuName; private String sex; public Integer getStuId() { return stuId; } public void setStuId(Integer stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
测试
package com.fyd.controller; 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 com.aaa.entity.Student; /** * @author fyd * @description 普通控制器 * 2017-12-27上午10:30:29 */ @Controller @RequestMapping("/hello") public class HeolloWorld { @Autowired private Student student; @RequestMapping("/hahaha") public String firstBoot(HttpServletRequest resquest) { System.out.println(student.getStuName()); System.out.println("aaaaaaaaaaaaaaa"); resquest.setAttribute("stu",student ); return "aaa"; } }
<!-- mybatisjar --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <!-- mysql连接jar --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> <!-- 德鲁伊数据库连接池依赖的jar --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.29</version> </dependency>
配置数据库连接池
package com.fyd.config; import java.sql.SQLException; import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; @Configuration public class DruidConfig { private Logger logger = LoggerFactory.getLogger(DruidConfig.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.driver-class-name}") 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.filters}") private String filters; @Value("${spring.datasource.logSlowSql}") private String logSlowSql; @Bean public ServletRegistrationBean druidServlet() { ServletRegistrationBean reg = new ServletRegistrationBean(); reg.setServlet(new StatViewServlet()); reg.addUrlMappings("/druid/*"); reg.addInitParameter("loginUsername", username); reg.addInitParameter("loginPassword", password); reg.addInitParameter("logSlowSql", logSlowSql); return reg; } @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); filterRegistrationBean.addInitParameter("profileEnable", "true"); return filterRegistrationBean; } @Bean public DataSource druidDataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(dbUrl); datasource.setUsername(username); datasource.setPassword(password); datasource.setDriverClassName(driverClassName); datasource.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); try { datasource.setFilters(filters); } catch (SQLException e) { logger.error("druid configuration initialization filter", e); } return datasource; } }
properties属性
# 数据库访问配置 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/aaa-te?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull&useSSL=false spring.datasource.username=root spring.datasource.password=admin # 下面为连接池的补充设置,应用到上面所有数据源中 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 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 spring.datasource.filters=stat,wall,log4j spring.datasource.logSlowSql=true
mapper接口和mappper映射文件
package com.fyd.mapper; import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Mapper; /** * @author fyd * @description userinfo mapper接口 * 2017-12-27上午11:25:31 */ @Mapper public interface UserInfoMapper { List<Map> findAllUserInfo(); }
service接口和实现类
package com.fyd.service; import java.util.List; import java.util.Map; /** * @author fyd * @description 用户业务接口 * 2017-12-27上午11:29:49 */ public interface UserInfoService { List<Map> findAllUserInfo(); }
package com.fyd.service.impl; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.aaa.mapper.UserInfoMapper; import com.aaa.service.UserInfoService; /** * @author fyd * @description 用户业务实现类 * 2017-12-27上午11:30:55 */ @Service public class UserInfoServiceImpl implements UserInfoService { @Autowired private UserInfoMapper userInfoMapper; @Override public List<Map> findAllUserInfo() { return userInfoMapper.findAllUserInfo(); } }
测试
package com.fyd.controller; 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 com.aaa.entity.Student; import com.aaa.service.UserInfoService; /** * @author fyd * @description 普通控制器 * 2017-12-27上午10:30:29 */ @Controller @RequestMapping("/hello") public class HeolloWorld { @Autowired private Student student; @Autowired private UserInfoService userInfoServiceImpl; @RequestMapping("/hahaha") public String firstBoot(HttpServletRequest resquest) { List<Map> findAllUserInfo = userInfoServiceImpl.findAllUserInfo(); for (Map map : findAllUserInfo) { System.out.println(map.toString()); } System.out.println(findAllUserInfo.size()); System.out.println(student.getStuName()); System.out.println("aaaaaaaaaaaaaaa"); resquest.setAttribute("stu",student ); return "aaa"; } }
常见错误
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.aaa.mapper.UserInfoMapper.findAllUserInfo
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:225) ~[mybatis-3.4.4.jar:3.4.4]
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48) ~[mybatis-3.4.4.jar:3.4.4]
at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65) ~[mybatis-3.4.4.jar:3.4.4]
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58) ~[mybatis-3.4.4.jar:3.4.4]
解决方法,在系统配置文件中加入
#mybatis
mybatis.mapper-locations = classpath:mybatis/mapper/*.xml
版权付亚东笔记博客所有,禁止转载!!付亚东Java笔记博客
我的笔记博客版权我的笔记博客版权