springBoot搭建框架时经验总结

  • 在检查映射路径和确认代码无误的前提下,发现输入正确的链接在浏览器,报404等错误

       解决方法往往是由于项目没有引入模板依赖,比如Thymeleaf,Jsp等模板。每一种模板都有各自已经配置好的路径,可以按照约定的路径存放模板文件,也可以同properties、xml、aop注入的方式重新配置模板文件路径。

 

Thymeleaf所用的依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

 Jsp所用的三个依赖

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
</dependency>
<dependency>
   <groupId>javax.servlet.jsp</groupId>
   <artifactId>jsp-api</artifactId>
   <version>2.1</version>
   <scope>provided</scope>
</dependency>
<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>jstl</artifactId>
   <version>1.2</version>
</dependency>

还需要加入此依赖

<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
  <!--<scope>provided</scope>-->
</dependency>
  • 当在配置文件properties配置文件配置访问路径以及端口号时,可能会遇到有些变量有的项目可以使用,有的项目不能使用的纠结问题。
  • 最后在设置页面存放路径的时候,如果在和resource同级的目录下没有webapp文件夹,则需要创建一个和reource同级的webapp,然后在改文件夹下存放页面文件!(容易遗漏)

       解决方法是因为springBoot的版本问题,一般是修改或增加部分变量名即可,此时上网可以查询得到答案。

 

  • 其余常用依赖如下:

  热部署依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <optional>true</optional>
   <scope>true</scope>
</dependency>
#热部署配置在哪个文件夹下更改时重新启动项目
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java

 aop注入依赖

<!--使用AspectJ方式注解需要相应的包-->
<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjrt</artifactId>
   <version>${aspectj.version}</version>
</dependency>
		
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

使用切面编程示例:

/**
 * 创建Aspect切面类
 */
@Component
@Aspect
public class WebControllerAop {

    private Logger logger = LoggerFactory.getLogger(WebControllerAop.class);

    /**
     * 1、execution(): 表达式主体。

       2、第一个*号:表示返回类型, *号表示所有的类型。

       3、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service.impl包、子孙包下所有类的方法。

       4、第二个*号:表示类名,*号表示所有的类。

       5、*(..):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数
     */
    @Pointcut("execution(* com.example.demo.service.user..*.*(..))")
    public void pointCut(){

    }

    @Before("pointCut()")
    public void before(){
        logger.info("【注解:Before】------------------切面  before");
    }
}

事务管理切面编程:


import org.aspectj.lang.annotation.Aspect;
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.interceptor.TransactionInterceptor;

import java.util.Properties;

@Aspect
@Configuration
public class TransactionAdviceConfig {
    private static final String AOP_POINTCUT_EXPRESSION = "execution(* com.example.demo.service.user..*.*(..)))";

    @Autowired
    private PlatformTransactionManager transactionManager;

    @Bean
    public DefaultPointcutAdvisor defaultPointcutAdvisor() {
        //指定一般要拦截哪些类
        AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
        pointcut.setExpression(AOP_POINTCUT_EXPRESSION);
        //配置advisor
        DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor();
        advisor.setPointcut(pointcut);
        Properties attributes = new Properties();
        attributes.setProperty("get*", "PROPAGATION_SUPPORTS,ISOLATION_READ_COMMITTED,-Exception");
        attributes.setProperty("find*", "PROPAGATION_SUPPORTS,ISOLATION_READ_COMMITTED,-Exception");
        attributes.setProperty("queryRecordBy*", "PROPAGATION_SUPPORTS,ISOLATION_READ_COMMITTED,-Exception");
        attributes.setProperty("queryPage*", "PROPAGATION_SUPPORTS,ISOLATION_READ_COMMITTED,-Exception");

        attributes.setProperty("update*", "PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED,-Exception");
        attributes.setProperty("insert*", "PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED,-Exception");
        attributes.setProperty("save*", "PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED,-Exception");
        attributes.setProperty("test*", "PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED,-Exception");
        attributes.setProperty("modify*", "PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED,-Exception");
        attributes.setProperty("cancle*", "PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED,-Exception");
        attributes.setProperty("delete*", "PROPAGATION_REQUIRED,ISOLATION_READ_COMMITTED,-Exception");

        TransactionInterceptor txAdvice = new TransactionInterceptor(transactionManager, attributes);
        advisor.setAdvice(txAdvice);
        return advisor;
    }
}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值