Nim*_*sky 6 java spring scalability stateless thread-safety
我假设如果实例变量由spring IOC管理,并且是单例,那么desgin可以被称为无状态和线程安全.因此,这种类型的设计可以扩展到集群服务器.我的假设是否正确,如下所述?
@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);
}
Run Code Online (Sandbox Code Playgroud)
然后注入:
@Service("myService")
public class MyServiceImpl {
@Resource(name = "myDao")
Dao dao;
@Override
@Transactional(readOnly = true)
public int getScore(String str) {
return dao.getMyInt(str);
}
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*icz 14
Spring bean不是无状态的,因为它们具有状态(字段).从技术上讲,它们甚至不可变,因为您可以随时更改注入的字段.
但是,通过使用final字段和构造函数注入,您可以轻松地使Spring bean不可变.从可扩展性的观点来看,这种状态也没有问题.如果您的bean包含随时间变化的可变值,则这是群集时的主要问题.但是在Spring中,服务通常只包含在引导时注入的依赖项.所以他们实际上是无国籍和不可改变的.
运行相同Spring应用程序的服务器数量无关紧要 - bean和依赖项本身是安全的.但是如果你的Spring bean包含计数器,缓存,可变映射等等 - 你需要考虑它们.
| 归档时间: |
|
| 查看次数: |
8223 次 |
| 最近记录: |