Por lo que entiendo, tanto DataSource
y JdbcTemplates
son threadsafe
, por lo puede configurar una sola instancia de un JdbcTemplate
y luego inyectar de forma segura esta referencia compartida en múltiples DAO (o repositorios). También DataSource
debe ser un singleton de primavera, ya que administra el grupo de conexiones.¿Varias instancias de JdbcTemplate o no?
El funcionario Spring Documentation JdbcTemplate best practices explica las alternativas (extractos del manual están en cursiva, y mis notas entre corchetes:
- configurar un origen de datos en el archivo de configuración de la primavera, y entonces la dependencia a inyectar que comparte origen de datos bean en sus clases DAO; la JdbcTemplate se crea en la incubadora para el DataSource [con la configuración de XML y esto conduce a varias instancias JdbcTemplate, ya que en el colocador fuente de datos hay
new JdbcTemplate(dataSource)
] - uso componente de exploración y a. nnotation support para la inyección de dependencia. En este caso, anote la clase con @Repository (que lo convierte en candidato para el escaneo de componentes) y anote el método de configuración DataSource con @Autowired. [también este caso conduce a varias instancias de JdbcTemplate]
- Si usa la clase JdbcDaoSupport de Spring, y sus diversas clases DAO respaldadas por JDBC se extienden desde allí, su subclase hereda un método setDataSource (..) del Clase JdbcDaoSupport Puede elegir heredar de esta clase. La clase JdbcDaoSupport se proporciona solo como una conveniencia. [puesto que ya has una instancia de JdbcDaoSupport para cada clase de extenderlo, existe una instancia de JdbcTemplate demasiado para cada instancia de la clase derivada (ver source code for JdbcDaoSupport)]
Sin embargo, una nota posterior, desalienta toda la opciones recién presentadas:
Una vez configurada, una instancia de JdbcTemplate es segura para la rosca. Es posible que desee varias instancias JdbcTemplate si su aplicación accede a múltiples bases de datos, lo que requiere múltiples DataSources, y posteriormente múltiples JdbcTemplates configuradas de forma diferente.
En otras palabras, todas las opciones se acaban de presentar se traducirá en tener varias instancias JdbcTemplate (uno por DAO), y justo después de la documentación dice que no es necesario cuando se trabaja con una sola base de datos.
Lo que haría es inyectar directamente JdbcTemplate
a los diversos DAO que lo necesitan, entonces mi pregunta es, ¿está bien hacerlo? Y también, ¿también crees que la documentación de referencia de Spring es contradictoria? ¿O es mi malentendido?
sólo tiene que utilizar una fuente de datos/JdbcTemplate por base de datos del esquema – tom
documentación de la primavera no es auto-contradictoria. Debería leer el enunciado anterior: Independientemente de cuál de los estilos de inicialización de plantilla anteriores elija usar (o no), rara vez es necesario crear una nueva instancia de una clase JdbcTemplate cada vez que quiera ejecutar SQL. La mejor práctica es una JdbcTemplate per dao. Múltiples JdbcTemplates si quiere múltiples DataSources solamente. – hutingung