本篇文章给大家谈谈使用Spring进行线程安全的无状态设计,以及使用spring进行线程安全的无状态设计程序的知识点,同时本文还将给你拓展HashMap是线程安全的吗?为什么不是线程安全的、HashM
本篇文章给大家谈谈使用Spring进行线程安全的无状态设计,以及使用spring进行线程安全的无状态设计程序的知识点,同时本文还将给你拓展HashMap 是线程安全的吗?为什么不是线程安全的、HashMap是线程安全的吗?有哪些线程安全的容器、java – Spring Data(JPA)存储库是否是线程安全的? (又名SimpleJpaRepository线程安全)、java – Spring安全无状态配置等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 使用Spring进行线程安全的无状态设计(使用spring进行线程安全的无状态设计程序)
- HashMap 是线程安全的吗?为什么不是线程安全的
- HashMap是线程安全的吗?有哪些线程安全的容器
- java – Spring Data(JPA)存储库是否是线程安全的? (又名SimpleJpaRepository线程安全)
- java – Spring安全无状态配置
使用Spring进行线程安全的无状态设计(使用spring进行线程安全的无状态设计程序)
我假设如果实例变量是由spring
IOC管理的,并且是单例的,则设计可以被称为无状态和线程安全的,因此这种设计可以扩展到集群服务器。我的假设是否正确?概述如下?
@Repository("myDao")public class MyDao implements Dao { @Autowired private JdbcTemplate jdbcTemplate; @Value("${sqlFoo}") private String foo; @Override public Integer getMyInt(String str) { return jdbcTemplate.queryForInt(foo, str); }
然后将其注入:
@Service("myService")public class MyServiceImpl { @Resource(name = "myDao") Dao dao; @Override @Transactional(readOnly = true) public int getScore(String str) { return dao.getMyInt(str); }}
答案1
小编典典Spring bean不是无状态的,因为它们具有状态(字段)。从技术上讲,它们甚至不是一成不变的,因为您可以随时更改注入的字段。
但是,您可以通过使用final
字段和构造函数注入轻松地使Spring
bean不可变。从可伸缩性的角度来看,这种状态也不成问题。如果您的bean包含随时间变化的可变值,那么这是集群时的主要问题。但是在Spring服务中,通常仅包含在引导时注入的依赖项。因此,它们实际上是无状态且不可变的。
运行相同的Spring应用程序的服务器数量无关紧要-Bean和依赖项本身是安全的。 但是, 如果您的Spring bean包含计数器,缓存,可变映射等-
您需要考虑一下它们。
HashMap 是线程安全的吗?为什么不是线程安全的
1.HashMap 不是线程安全的。
2.在put或resize时会发生,后一个线程操作的数据会把前一个线程操作的数据覆盖,或者数据丢失的情况。
解释来源于此处:https://www.cnblogs.com/FirstClass/p/6501290.html
HashMap是线程安全的吗?有哪些线程安全的容器
HashMap不是线程安全的。
HashMap的扩容机制就是重新申请一个容量是当前2倍的桶数组,然后将原先的记录逐个映射到新的桶里,然后将原先桶逐个置为null使得引用失效。
在put或resize发生时,后一个线程的操作数据会将前一个数据覆盖,导致数据丢失。
线程安全的容器:
Vector、HashTable、concurrentHashMap、copyOnWriteArrayList
java – Spring Data(JPA)存储库是否是线程安全的? (又名SimpleJpaRepository线程安全)
我使用Spring Data (JPA) repository来处理CRUD样板.
我这样定义我的存储库接口:
import org.springframework.data.repository.CrudRepository;
public interface FooRepository extends CrudRepository
Spring然后自动神奇地生成我所述接口的实现.我们得到的是代理,但我相信最终我们会得到一个org.springframework.data.jpa.repository.support.SimpleJpaRepository.
如果底层目标类是线程安全的,则JdkDynamicAopProxy是线程安全的.因此问题是:SimpleJpaRepository线程安全吗?
最佳答案
一般来说,是的.它假定一个托管的EntityManager,我们将从Spring的工厂类中获取(如果您使用Spring作为容器)或者作为CDI托管bean(通过@Producer方法声明).
java – Spring安全无状态配置
所以在我的spring-security.xml中,我有
<!-- Stateless RESTful service using Basic authentication --> <http pattern="/restful/**" create-session="stateless"> <intercept-url pattern='/**' access='ROLE_REMOTE' /> <http-basic /> </http>
当我使用浏览器测试它时,需要对第一个请求进行身份验证.但随后不是.根据我的理解,我应该看到用户登录提示.有什么我想念的吗?
解决方法
为了确保您的配置确实是无状态的,您可以尝试使用命令行工具(wget,curl)发出一些请求(使用和不使用身份验证).
我们今天的关于使用Spring进行线程安全的无状态设计和使用spring进行线程安全的无状态设计程序的分享已经告一段落,感谢您的关注,如果您想了解更多关于HashMap 是线程安全的吗?为什么不是线程安全的、HashMap是线程安全的吗?有哪些线程安全的容器、java – Spring Data(JPA)存储库是否是线程安全的? (又名SimpleJpaRepository线程安全)、java – Spring安全无状态配置的相关信息,请在本站查询。
本文标签: