NutzCN Logo
问答 nutz-plugins-spring-boot-starter 事物配置变更
发布于 666天前 作者 jiyuefeng 678 次浏览 复制 上一个帖子 下一个帖子
标签:

nutz.version 从1.r.62 升级到1.r.65 发现原有的Trans.exec 事物代码全部失效,反复查看,发现是nutz-plugins-spring-boot-starter 将事物托管给了spring,本着兼容原则,是不是加一个nutz.spring.trans 的配置开关,由使用者来决定使用哪种事物呢。

贴一下两版本的配置变化

@Configuration
@ConditionalOnClass({Dao.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class, SqlManagerAutoConfiguration.class})
public class NutzDaoAutoConfiguration {

    @Bean
    public Dao dao(DataSource dataSource, SqlManager sqlManager, DaoRunner daoRunner) {
        NutDao dao = new NutDao(dataSource, sqlManager);
        dao.setRunner(daoRunner);
        return dao;
    }

    @Bean
    @ConditionalOnMissingBean(DaoRunner.class)
    public DaoRunner daoRunner() {
        return new SpringDaoRunner();
    }

}
@Configuration
@ConditionalOnClass({ Dao.class })
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, FileSqlManagerAutoConfiguration.class })
public class NutzDaoAutoConfiguration {

	public NutzDaoAutoConfiguration() {
	}

	@Autowired
	private SqlManager sqlManager;

	@Autowired
	DataSource dataSource;

	@Bean
	public Dao dao() {
		return new NutDao(dataSource, sqlManager);
	}

}

现在如果不想改变旧代码的话,一是维持nutz版本在1.r.62 ,而是写一个同名类扔到项目代码中?在目前版本不更新的情况下,有没有更好的解决方式?

6 回复
    @Bean
    @ConditionalOnMissingBean(DaoRunner.class)
    public DaoRunner daoRunner() {
        return new SpringDaoRunner();
    }

把默认的NutDaoRunner声明为ioc bean , 应该就能覆盖默认行为了

以上是 NutzDaoAutoConfiguration 里面 代码

NutzDaoAutoConfiguration 的代码我看了,我是想去掉 默认的NutDao 设置的 SpringDaoRunner

ConditionalOnMissingBean 就是切入点啦

一开始还没理解,以上方法适用于新版本,那么对于老版本,比如1.r.65

就有点悲催了。

public NutzDaoAutoConfiguration() {
	}

	@Autowired
	DataSource dataSource;

	@Autowired
	DaoRunner daoRunner;

	@Bean
	public Dao dao(SqlManager sqlManager) {
		NutDao dao = new NutDao(dataSource, sqlManager);
		dao.setRunner(new SpringDaoRunner());
		return dao;
	}

	@Bean
	@ConditionalOnMissingBean(DaoRunner.class)
	public DaoRunner daoRunner() {
		return new SpringDaoRunner();
	}

把NutDaoRunner声明成bean就行啦

	@Bean
	public DaoRunner daoRunner() {
		return new NutDaoRunner();
	}

添加回复
请先登陆
回到顶部