SpringBoot(一)

本文介绍了SpringBoot框架,其简化开发、集成WEB容器、Starter依赖、生产级功能和无XML配置的特点。还详细讲解了如何解决跨域问题,以及Spring事务的编程式和声明式配置,包括隔离级别、传播行为和不生效的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是SpringBoot?他和别的框架相比有什么优势?

他是一个Spring团队开发的,简化Spring项目开发的框架,能够让开发人员快速上手,使用少量的代码进行开发程序。

2.SpringBoot的特点和功能?

(1)能够独立创建Spring项目

(2)整合了Tomcat、jetty等WEB容器,不用部署War包

(3)提供Starter依赖进行简化Spring的配置

(4)提供了生产级别功能:监控、健康检查和外部化配置

(5)不需要XML的配置

3.SpringBoot怎么解决跨域问题?

(1)跨域问题是什么导致的?

           浏览器的同源策略

同源的定义
如果两个 URL 协议端口(如果有指定的话)和主机都相同的话,则这两个 URL 的。

方法一:过滤器

public class CrossDomainFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        HttpServletResponse resp = (HttpServletResponse)response;

        resp.setHeader("Access-Control-Allow-Origin","*");
        resp.setHeader("Access-Control-Allow-Methods","GET,POST,DELETE,PUT,OPTIONS");
        resp.setHeader("Access-Control-Allow-Headers","*");
        resp.setHeader("Access-Control-Max-Age","3600");

        chain.doFilter(request,resp);


    }

在config中配置过滤器

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Bean
    public FilterRegistrationBean<CrossDomainFilter> register(){
        FilterRegistrationBean<CrossDomainFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new CrossDomainFilter());

        registrationBean.addUrlPatterns("/*");

        registrationBean.setOrder(-100);
        return registrationBean;
    }
}

4.Spring事务有几种方式?

Spring事务分为两种,一种是编程式事务(在开发中,很少用到,这里不再赘述),另一种是AOP声明式事务

声明式事务

(1)采用xml配置文件,进行配置
    <!-- 事务管理器 DataSourceTransactionManager -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- transaction-manager默认到Ioc中查找id为transactionManager的事务管理器 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!-- 对哪些方法执行事务,配置事务定义信息(隔离级别、传播行为、是否只读、超时时间、回滚机制)-->
            <!-- 1. name属性: 为哪些方法添加事务 -->
            <!-- 2. isolation属性: 使用什么隔离级别,这里有5种配置方式 -->
            <!-- 3. propagation属性:配置事务的传播行为 -->
            <!-- 4. timeout属性:-1:表示永不超时;3:3秒钟超时 -->
            <!-- 5. read-only属性 -->

            <!-- 6. rollback-for属性:指定对哪些异常起作用 -->
            <!-- 7. no-rollback-for属性:指定对哪些异常不起作用 -->
            <tx:method name="add*" rollback-for="Throwable"/>
            <tx:method name="save*" rollback-for="Throwable"/>
            <tx:method name="update*" rollback-for="Throwable"/>
            <tx:method name="del*" rollback-for="Throwable"/>
            <tx:method name="transfer" rollback-for="Throwable"/>
            <tx:method name="increase" rollback-for="Throwable"/>
            <tx:method name="decrease" propagation="REQUIRED" rollback-for="Throwable"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <aop:pointcut id="txPointcut" expression="execution(* com.etoak.service..*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
    </aop:config>
(2)采用注解的方式配置

首先在配置文件里(spring.xml)添加事务管理器(DataSourceTransactionManager)以及开启注解事务,然后再在相应的实现类上加上@Transactional注解,开启事务

    <!-- 事务管理器 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!-- 注解事务 -->
    <tx:annotation-driven transaction-manager="transactionManager" />
    @Transactional(propagation = Propagation.REQUIRED,
            isolation = Isolation.DEFAULT,
            rollbackFor = Exception.class)
    @Override
    public void transfer(int increaseId, int decreaseId, int money) throws SQLException {
        userService.increase(increaseId, money);
        userService.decrease(decreaseId, money);

        // int i = 1 / 0;
        throw new SQLException("111111");
    }

5.Spring事物的隔离级别有几个?默认是哪一种?

Spring事物的隔离级别有5种

DEFAULT 默认使用数据库的隔离级别

mysql:REPEATABLE_READ(可重复读) oracle:READ_COMMITTED(已提交读)

READ_UNCOMMITTED

READ_COMMITTED

REPEATABLE_READ

SERIALIZABLE

6.Spring事务的传播行为、传播特性、传播机制 ,以及支持多少种传播行为?

Spring事务的传播行为是指 多个事务 同时存在时,Spring如何处理事务,它们是否需要在同一个事务中运行; 一个有事务的方法被另外有事务的方法调用时,这个事务应该如何运行;

Spring支持七种传播特性:

1.REQUIRED : 表示如果当前存在一个事务,则加入该事务,否则将新建一个事务,这个Spring事务默认传播行为。
2. REQUIRES_NEW :表示不管是否存在事务,都创建一个新的事务,把原来的事务挂起,新的事务执行完毕,继续执行老的事务;
3.SUPPORTS: 表示如果当前存在事务,就加入该事务;如果当前没有事务,那就不使用事务;
4.NOT_SUPPORTED:表示不使用事务,如果当前存在事务,就把当前事务暂停,以非事务方式执行
5.MANDATORY : 表示必须在一个已有的事务中执行,如果当前没有事务,则抛出异常:
6.NEVER : 表示以非事务方式执行,如果当前存在事务,则抛出异常:
7. NESTED: 这个是嵌套事务。如果当前存在事务,则在嵌套事务内执行;如果当前不存在事务,则创建一个新的事务;嵌套事务使用数据库中的保存点来实现,即嵌套事务回滚不影响外部事务但外部事务回滚将导致嵌套事务回滚。

Spring事务的回滚规则:

7.事务不生效的两种情况?

(1)同一个Service中的两个方法,没有事务的方法调用有事务的方法,没有事务的方法报异常.

解决方法: 重新注入一个当前类型的代理对象

(2)默认情况下抛出非运行时异常。

解决方法:rollbackFor

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百事老饼干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值