一: 首次搭建:https://blog.csdn.net/u013187139/article/details/68944972
整合mybatis: https://www.jianshu.com/p/a811a89d1b28
log4j日志配置:https://www.jb51.net/article/105032.htm
reids配置:https://blog.csdn.net/baidu_41669919/article/details/79148203 https://www.cnblogs.com/baizhanshi/p/7503417.html
redis加锁:
权限控制shiro: 简单的实现登录
返回工具类(包括错误代理)、自定义过滤器:https://blog.csdn.net/small_mouse0/article/details/77840130
图片验证码(流的形式返回给前端):https://blog.csdn.net/Colton_Null/article/details/78744240
报错时,跳转默认报错页面:
文件的批量上传下载:https://www.jb51.net/article/106842.htm
多数据源的配置:
AOP切面的引用:https://www.cnblogs.com/bigben0123/p/7779357.html
springboot系统学习:https://www.zybuluo.com/SendLin/note/1149496#%E4%B9%9D%E8%BF%87%E6%BB%A4%E5%99%A8
二: 遇到的坑:
1. 连接数据库时,报错:Invalid bound statement (not found): com.demo.mapper.UserMapper.findUser
(1)检查注解@Mapper是否添加上,引用的地方是否有扫描注解@ComponentScan(value = {"com.demo.mapper"}), 结果都有
(2)检查dao文件和xml文件中的方法名是否相同, 相同
(3)检查配置文件application.properties中 映射xml文件路径的配置 mybatis.mapper-locations=classpath:com/demo/mapper/xml/*.xml 是否正确, 正确
(4)检查xml文件中 <mapper namespace="com.demo.mapper.UserMapper"> 命名空间是否正确, 正确
(5)检查编译文件target中classes目录下是否成功编译了xml文件, 结果 发现了问题 目录下 并没有 对应的xml文件
原因:idea编辑器,不会自动编译src/main/java中的xml文件,只会自动编译resource下的,
但为了保持结构清晰,我们习惯把xml文件放在和dao同级或低一级的xml包中,此时,就出现了上述问题;
解决方法:添加poom依赖,强制编译:build中添加如下代码:
<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources>
如图:
2. 配置log4j日志文件时,控制台可以输出,但生成不了日志文件:原因:日志输出的路径出错,应该精确到文件名 E:/Test/testSpringBoot/log/mylog.log
(1)在src/main/resources目录下加入log4j.properties配置文件
(2)在log4j.properties配置文件中添加代码如下
# LOG4J配置 log4j.rootCategory=INFO, stdout, file # 控制台输出 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n # root日志输出 log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.file=E:/Test/testSpringBoot/log/mylog.log log4j.appender.file.DatePattern='.'yyyy-MM-dd log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n # com.demo包下的日志配置 log4j.category.com.demo=DEBUG, didifile # com.demo log4j.appender.didifile=org.apache.log4j.DailyRollingFileAppender log4j.appender.didifile.file=E:/Test/testSpringBoot/log/mylog2.log log4j.appender.didifile.DatePattern='.'yyyy-MM-dd log4j.appender.didifile.layout=org.apache.log4j.PatternLayout log4j.appender.didifile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L ---- %m%n log4j.logger.error=errorfile # error日志输出 log4j.appender.errorfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.errorfile.file=E:/Test/testSpringBoot/log/mylog3.log log4j.appender.errorfile.DatePattern='.'yyyy-MM-dd log4j.appender.errorfile.Threshold = ERROR log4j.appender.errorfile.layout=org.apache.log4j.PatternLayout log4j.appender.errorfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
3. 经过接口跳转至页面时,报错(有一个需要注意的点是:注解只能是 @Controller,不能是@RestController,否则无法跳转):
由于,我在application.yml中没有配置默认前后缀,所以箭头指向的地方应该改为: return "/Test.html" 加上后缀后,成功;
或者,在配置文件中加上后缀(刚开始没有箭头指向的那一行配置,添加上以后就可以了):
4. 整合mybatisPlus时,遇到的问题, 报错:创建mapper的bean对象时出错,后来在网上找了一个方法是,在启动类上加上注解: @ComponentScan("com.demo.mapper.*") 但加完以后,在我这并不好使,启动虽然可以正常启动,但访问时,却只能访问页面,接口无法访问,连断点都不打上,应该是连编译都没有编译(自己猜测的原因,可能是加上注解类后,导致项目启动时,没有自动扫描,导致controllermei没有正常编译,故调用不了),后来又经过几次尝试,还是不行,最后就把所有的关于mabatisplus的配置和设置,一点点删掉,看看问题到底出在哪,最后发现应该是配置文件出现的问题:
箭头指向的配置注释掉了,就没有报错了(当然,在重新配置的过程中,我也把连接池的配置,重新走了一遍,不排除是druid连接池没有正常配置导致的错误,这个,我准备再次搭建时,一探究竟)
5. 文件的上传与下载时,遇到路径不对的问题:尚未解决
三: 其他实用功能: https://blog.csdn.net/q15150676766/article/details/76563294 https://www.jianshu.com/p/3d788198efab
1. 定制banner
方法:
(1)在src/main/resource下新建一个banner.txt文件;
(2)去http://patorjk.com/software/taag/下自定义自己所要显示的文字,然后点击下面的select & copy
把复制的内容复制到banner.txt文件中,重启一下Springboot,发现已经成功了;
(3)如需关闭banner,则在入口main方法中加入 如下代码:
@SpringBootApplication @EnableScheduling //增加支持定时任务的注解 public class TestSpringBootApplication { public static void main(String[] args) { //SpringApplication.run(TestSpringBootApplication.class, args); SpringApplication application = new SpringApplication(TestSpringBootApplication.class); application.setBannerMode(Banner.Mode.OFF); application.run(args); } }
(4)banner下添加springboot的版本号 : 在banner.txt
这个文件中添加下面代码
springboot版本号: ${spring-boot.version}
springboot版本号: ${spring-boot.formatted-version}
2. 设置默认欢迎页
当输入域名是可以自动跳转到默认指定的网页
@Configuration public class DefaultView extends WebMvcConfigurerAdapter{ @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("forward:/index"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); super.addViewControllers(registry); } }
3. 在springboot中static是用来放资源的,templates是用来放页面的。
4. springboot项目的打包部署上线
a. 修改poom.xml文件的打包方式
<packaging>war</packaging>
b. 修改启动类
package com.demo; import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.stereotype.Component; import javax.servlet.MultipartConfigElement; @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @EnableScheduling //增加支持定时任务的注解 @EnableCaching //添加使用缓存的注解 public class TestSpringBootApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(TestSpringBootApplication.class, args); //如需关闭banner图时 /*SpringApplication application = new SpringApplication(TestSpringBootApplication.class); application.setBannerMode(Banner.Mode.OFF); application.run(args);*/ } @Override//为了打包springboot项目 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(this.getClass()); } @Bean MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setLocation("E:/Test/testSpringBoot"); return factory.createMultipartConfig(); }
c. 修改远程服务器中tomcat 下 conf/server.xml中的内容,找到Host 标签 添加自己上传war包的信息
<Context docBase="MyWebsite.war" path="/" reloadable="false" debug="0" privileged="true" ></Context>
此内容放在host标签内,如下
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context docBase="MyWebsite.war" path="/" reloadable="false" debug="0" privileged="true" ></Context> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
d. 将war包放在webapps下
e. 访问方式
ip:端口号/war包名/接口名称及参数
ip:端口号/war包名/页面文件名
f. 如果不想加包名,直接通过ip加端口号就能访问,则按如下设置:
打开tomcat/conf/server.xml文件,更改如下:
<Context docBase="MyWebsite/" path="/" reloadable="false" debug="0" privileged="true" ></Context>
具体配置文件的各标签解析,以及tomcat默认欢迎页的设置,可以参考:https://www.cnblogs.com/mufengforward/p/9444495.html
四:我的搭建项目:https://gitee.com/mufengforward/testSpringBoot