Tag: 春季

在Spring bean中启动新的事务

我们有: @Transactional(propagation = Propagation.REQUIRED) public class MyClass implementes MyInterface { … MyInterface有一个方法: go() 。 当go()执行时,我们开始一个新的事务,当方法完成时提交/回滚 – 这很好。 现在让我们在go()中调用MyClass中的一个私有方法,该方法具有@Transactional(propagation = Propagation.REQUIRES_NEW Spring似乎忽略了REQUIRES_NEW注释并且不启动一个新的事务,我相信这是因为Spring AOP在接口级别(MyInterface)上运行,不会拦截任何对MyClass方法的调用,这是正确的吗? 有没有办法在go()事务中启动一个新的事务? 是唯一的方法来调用另一个被configuration为REQUIRES_NEW事务的Spring托pipebean? 更新 :添加,当客户端执行go()他们通过接口的引用,而不是类: @Autowired MyInterface impl; impl.go();

spring – 你如何设置带有注释的地图中的枚举键

我有一个枚举类 public enum MyEnum{ ABC; } 比我的“米克”类有这个属性 private Map<MyEnum, OtherObj> myMap; 我有这个spring的XMLconfiguration。 <util:map id="myMap"> <entry key="ABC" value-ref="myObj" /> </util:map> <bean id="mick" class="com.x.Mick"> <property name="myMap" ref="myMap" /> </bean> 这很好。 我想用Spring注释replace这个xmlconfiguration。 你有什么想法如何自动assembly地图? 这里的问题是,如果我从xmlconfiguration切换到@Autowired注释(在Mick类的myMap属性上),Spring将引发此exception nested exception is org.springframework.beans.FatalBeanException: Key type [class com.MyEnum] of map [java.util.Map] must be assignable to [java.lang.String] Spring无法将stringABC识别为MyEnum.ABC对象。 任何想法? 谢谢

Spring注释@Controller是否与@Service相同?

Spring注释@Controller与@Service相同? 我有关于@Controller可以用于URL映射和调用业务逻辑的想法。 而@Service用于注释包含业务逻辑的服务类。 我可以使用@Controller而不是@Service来注释Service类吗?

如何在Spring中有条件地启用或禁用预定作业?

我使用@Scheduled注释在Spring中定义了使用cron样式模板的计划作业。 cron模式存储在configuration属性文件中。 实际上,有两个属性文件:一个默认configuration和一个与环境相关的configuration文件configuration(例如dev,test,prod customer 1,prod customer 2等),并覆盖一些默认值。 我在我的spring上下文中configuration了一个属性占位符bean,它允许我使用${}样式的占位符从我的属性文件中导入值。 作业bean看起来像这样: @Component public class ImagesPurgeJob implements Job { private Logger logger = Logger.getLogger(this.getClass()); @Override @Transactional(readOnly=true) @Scheduled(cron = "${jobs.mediafiles.imagesPurgeJob.schedule}") public void execute() { //Do something //can use DAO or other autowired beans here } } 我的上下文XML的相关部分: <!– Enable configuration of scheduled tasks via annotations –> <task:annotation-driven/> <!– Load […]

使用YAML的Spring @PropertySource

Spring Boot允许我们用YAML等价物replace我们的application.properties文件。 但是,我似乎打破了我的testing的障碍。 如果我注释我的TestConfiguration (一个简单的Javaconfiguration),它期望一个属性文件。 例如,这是行不通的: @PropertySource(value = "classpath:application-test.yml") 如果我在我的YAML文件中有这个: db: url: jdbc:oracle:thin:@pathToMyDb username: someUser password: fakePassword 我会用这样的东西来利用这些价值: @Value("${db.username}") String username 但是,我最终会遇到这样的错误: Could not resolve placeholder 'db.username' in string value "${db.username}" 我如何在testing中利用YAML的优点?

在@Test之后回滚事务

首先,我在StackOverflow上发现了很多关于这个的线程,但是他们没有一个真的帮助我,所以很抱歉要问可能重复的问题。 我使用spring-test运行JUnittesting,我的代码看起来像这样 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {}) public class StudentSystemTest { @Autowired private StudentSystem studentSystem; @Before public void initTest() { // set up the database, create basic structure for testing } @Test public void test1() { } … } 我的问题是,我想我的testing不影响其他testing。 所以我想为每个testing创build一些回滚。 我为此搜寻了很多,但到目前为止我还没有发现任何东西。 我为此使用Hibernate和MySql

Spring事务中requires_new和嵌套传播的区别

我无法理解PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED传播策略之间的行为差​​异。 在我看来,在这两种情况下,当前的stream程是回滚的,但不是整个交易。 任何线索?

我怎样才能有所有用户login(通过弹簧安全)我的Web应用程序的列表

我在我的web应用程序中使用spring安全,现在我想要列出所有在我的程序中login的用户。 我怎样才能访问该列表? 他们不是已经在spring的框架内保存了吗? 像SecurityContextHolder或SecurityContextRepository ?

在unit testing环境中重新定义Spring bean

我们使用Spring来实现我的应用程序,并且使用Spring Testing框架进行unit testing。 我们有一个小问题:应用程序代码从类path中的位置列表(xml文件)加载Spring应用程序上下文。 但是当我们运行我们的unit testing时,我们希望一些Spring bean是嘲讽而不是完整的实现类。 此外,对于某些unit testing,我们希望某些bean成为嘲讽,而对于其他unit testing,我们希望其他bean成为嘲笑,因为我们正在testing应用程序的不同层。 所有这一切意味着我想重新定义应用程序上下文的特定的豆,并在需要时刷新上下文。 在这样做的时候,我想重新定义位于一个(或几个)原始的xml bean定义文件中的一小部分bean。 我找不到一个简单的方法来做到这一点。 人们一直认为Spring是一个unit testing友好的框架,所以我必须在这里丢失一些东西。 你有什么想法如何做到这一点? 谢谢。

Spring启动@ResponseBody不会序列化实体ID

有一个奇怪的问题,无法弄清楚如何处理它。 有简单的POJO: @Entity @Table(name = "persons") public class Person { @Id @GeneratedValue private Long id; @Column(name = "first_name") private String firstName; @Column(name = "middle_name") private String middleName; @Column(name = "last_name") private String lastName; @Column(name = "comment") private String comment; @Column(name = "created") private Date created; @Column(name = "updated") private Date updated; @PrePersist protected void onCreate() […]