我在堆栈溢出文章中看到很多评论我发现@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,所有事务回滚都会发生异常
为什么堆栈溢出问道,"不要在控制器中进行事务处理.将它们放在服务层类中."? [资源]
当使用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和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"),
但我不知道如何做到这一点感谢帮助
我有一个 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
我正在运行以下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) 我有一个客户检查工作。我找不到如何自动将作业时间设置为仅在星期一,星期五和星期六的上午10点运行的方法。有没有可能使用Spring进行设置@Scheduled?
我有一个 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) 在任何应用程序中,春季启动是否有任何方法可以从请求中获取标头?一些静态的东西会很棒.
请注意,@RequestHeader这对我不起作用,因为我需要在服务层上使用此值.
java ×4
spring ×3
spring-boot ×2
ansible ×1
ansible-2.x ×1
aws-lambda ×1
controller ×1
hazelcast ×1
header ×1
hibernate ×1
http ×1
locking ×1
schedule ×1
service ×1
sonarqube ×1
spring-mvc ×1