小编ahm*_*tin的帖子

为什么将@Transactional与@Service一起使用而不是@Controller

我在堆栈溢出文章中看到很多评论我发现@Transactional@Service@Controller一起使用的某些事情

"通常,应该在服务层进行交易."

"正常情况是在服务层级注释"

"认为事务属于服务层.它是了解工作单元和用例的人.如果你有几个DAO注入到需要在单个事务中协同工作的服务,那么这是正确的答案." [资源]

使用带有@service层的@transactional的缺点

如果我有2个方法,例如saveUser()和saveEmail()(因为我将电子邮件存储在数据库中以便稍后发送 - 就像一个队列)我会在我的服务中创建一个方法saveUserAndSendEmail(用户用户),它将是事务性的.[资源]

这意味着我在服务层创建了许多方法,而不是一个Save Generic Method,如下所示

public <T> long save(T entity) throws DataAccessException {
    Session session = sessionFactory.getCurrentSession();
    long getGenVal=(Long) session.save(entity);
    return getGenVal;
}
Run Code Online (Sandbox Code Playgroud)

根据上面的解决方案,这意味着我们有很多方法,如以下LOL ..

public <T> long saveAccount(T entity)....

public <T> long saveWithAuditLog(T entity, K entity1)....

public <T> long saveWithAuditLogAndEntries(T entity, K entity, M entity)....

克服这种情况

我在@Controller中使用@Transactional,只需制作一个通用保存方法,并使用这个简单的保存方法保存所有实体/模型.如果任何方法无法保存,则控制器中的所有事务都会成功回滚.

确保@Transactional应与@Controller一起使用的其他情况

在@Controller中:

pt.save(entity1);
pt.save(entity2);
int a = 2/0;
pt.save(entity3);
Run Code Online (Sandbox Code Playgroud)

如果@Transactional on Service,前2个实体成功保存,但第三个不回滚所有事务

如果@Tratroller上的@Transactional,所有事务回滚都会发生异常

为什么堆栈溢出问道,"不要在控制器中进行事务处理.将它们放在服务层类中."? [资源]

service hibernate controller spring-mvc transactional

17
推荐指数
2
解决办法
2万
查看次数

如何在Spring中的@Bean方法中定义可选参数(依赖项)?

当使用spring注释@Bean来声明某些实例时,参数是注入的,并且这些是必需的,如果找不到实例,则会抛出NoSuchBeanException.

如何使它可选?就像是@Autowired(required = false)

例如

@Configuration
class SomeConfiguration {

  @Bean
  public SomeComponent someComponent(Depend1 depend1,
                                     Depend2 depend2) {
    SomeComponent someComponent = new SomeComponent();
    someComponent.setDepend1(depend1);
    if (depend2 != null) {
      someComponent.setDepend2(depend2);
    }
    return someComponent;
  }
}
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

10
推荐指数
2
解决办法
3941
查看次数

如何在java中添加消费者组到消息?

我是java,spring和kafka的新手
我有下一个发送消息的代码

kafkaTemplate.send(topic, message);
Run Code Online (Sandbox Code Playgroud)

我对生产者的配置:

 props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,
            bootstrapServers);
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
            IntegerSerializer.class);
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
            StringSerializer.class);
    // value to block, after which it will throw a TimeoutException
    props.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, 5000);
Run Code Online (Sandbox Code Playgroud)

我想与我的消费者群体发送消息(例如"MyConsumerGroup"),
但我不知道如何做到这一点感谢帮助

java spring kafka-producer-api

8
推荐指数
1
解决办法
174
查看次数

保留 LogGroup 并在重新部署 Lambda 时重用它

我有一个 CF 堆栈,我在其中创建了一个 Lambda 和一个针对该 lambda 的 LogGroup。目前,LogGroup 尚未制定删除策略。

我想实现一个解决方案,即使堆栈在 AWS 中被删除,我们仍保留 LogGroup,这样我们就不会丢失日志。我可以通过添加来做到这一点

UpdateReplacePolicy: Retain
DeletionPolicy: Retain
Run Code Online (Sandbox Code Playgroud)

到 LogGroup 资源。

我的问题是:在极少数情况下,我们需要删除堆栈并重新创建它,在这些情况下,当我删除 CF 堆栈时,LogGroup 将保留在那里。当我尝试重新创建堆栈时,收到“ LogGroup 已创建”警告,并且无法创建堆栈。如何使用单个 CF 模板实现此目的?我需要为 LogGroup 提供某种“如果不存在则创建,否则使用现有的”功能。

注意:这可以通过使用单独的 CF 模板创建日志组并将日志组名称导入到服务的 CF 来实现,但是我不想将 LogGroup 的创建和使用分开。

提前致谢!

amazon-web-services aws-cloudformation amazon-cloudwatch aws-lambda

6
推荐指数
0
解决办法
1627
查看次数

callback_plugins目录中的Ansible插件运行多次

我正在运行以下ansible脚本,以便能够使用ansible部署我的Java项目:

ansible-playbook -u ansible -i inventory/test-env release.yml
Run Code Online (Sandbox Code Playgroud)

我在ansible下的callback_plugins目录下添加了这个插件.问题是每当我运行ansible-playbook脚本时,此插件中的日志记录在最后运行多次并且不一致.有时我会得到两次,有时三次.

您是否知道为什么会出现这种情况以及每次日志数量变化的原因?

我已经读过,如果插件的命名与ansible本身的现有插件相同,则可能会导致此问题.因此,我将此插件的名称更改为项目中的其他名称.

请注意,我的ansible版本是:2.4.2

这是我得到的输出:

PLAY RECAP *********************************************************************
def1.test1.domain.com : ok=101  changed=31   unreachable=0    failed=0   
def2.test1.domain.com : ok=70   changed=20   unreachable=0    failed=0   
abc1.test1.domain.com : ok=6    changed=0    unreachable=0    failed=0   
abc2.test1.domain.com : ok=6    changed=0    unreachable=0    failed=0   

copy domain to managed servers ----------------------------------------- 97.00s
start managed servers -------------------------------------------------- 82.62s
wait for admin server to start ----------------------------------------- 31.64s
create domain ---------------------------------------------------------- 25.97s

Playbook finished: Wed Jan 30 11:09:04 2019, 114 total tasks.  0:06:17 elapsed. …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-2.x

5
推荐指数
1
解决办法
154
查看次数

在特定日期通过(Spring @Scheduled)运行作业

我有一个客户检查工作。我找不到如何自动将作业时间设置为仅在星期一,星期五和星期六的上午10点运行的方法。有没有可能使用Spring进行设置@Scheduled

java spring schedule

4
推荐指数
1
解决办法
3796
查看次数

当前线程不是锁的所有者!榛卡斯特

我有一个 Spring boot 应用程序,其中有 Hazelcast 用于缓存。当多个实例使用 Hazelcast 进行集群时,我在解锁操作上遇到此异常:

java.lang.IllegalMonitorStateException: Current thread is not owner of the lock! -> Owner: 33ce48f8-dda3-471f-abae-994d25dcc030, thread ID: 55
    at com.hazelcast.concurrent.lock.operations.UnlockOperation.unlock(UnlockOperation.java:75) ~[hazelcast-3.11.4.jar!/:3.11.4]
    at com.hazelcast.concurrent.lock.operations.UnlockOperation.run(UnlockOperation.java:64) ~[hazelcast-3.11.4.jar!/:3.11.4]
    at com.hazelcast.spi.Operation.call(Operation.java:170) ~[hazelcast-3.11.4.jar!/:3.11.4]
    at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.call(OperationRunnerImpl.java:208) [hazelcast-3.11.4.jar!/:3.11.4]
    at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:197) [hazelcast-3.11.4.jar!/:3.11.4]
    at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:413) [hazelcast-3.11.4.jar!/:3.11.4]
    at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:153) [hazelcast-3.11.4.jar!/:3.11.4]
    at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:123) [hazelcast-3.11.4.jar!/:3.11.4]
    at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java:110) [hazelcast-3.11.4.jar!/:3.11.4]
Run Code Online (Sandbox Code Playgroud)

这是我进行锁定和解锁操作的组件:

package com.companyname.service.servicename.job;
import com.hazelcast.core.ILock;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class UpdateRaceCacheJob {

    @Scheduled(fixedDelay = 10000)
    public void updateRaceCache() {
        ILock lock = hazelcastInstance.getLock("race-lock");
        try {
            if (!lock.tryLock()) { …
Run Code Online (Sandbox Code Playgroud)

locking java.util.concurrent hazelcast sonarqube

3
推荐指数
1
解决办法
7808
查看次数

从Spring Boot应用程序的服务层获取请求标头

在任何应用程序中,春季启动是否有任何方法可以从请求中获取标头?一些静态的东西会很棒.

请注意,@RequestHeader这对我不起作用,因为我需要在服务层上使用此值.

java header http spring-boot

1
推荐指数
1
解决办法
5750
查看次数