Когда начинаешь писать приложение, работающее с JDBC или Spring JDBC, возникает вопрос — вроде бы понятно, как обращаться к базе, как делать запросы, как получать данные и т.д. Но почти нигде не сказано как настраивать соединение с базой данных. Я б хотел исправить это упущение.
Встраиваемые базы данных
Spring имеет собственную поддержку для встраиваемых баз данных, котоыре создаются в памяти на время существования контекста. На этом его поддержка заканчивается и если от встраивемой базы данных требуется большее время жизни или, например, обращение из нескольких процессов, настраивать соединение с ней надо вручную.
H2
Артефакт драйвера и самой базы:
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.190</version> </dependency>
Варианты создания DataSource:
<jdbc:embedded-database id="dataSource" type="H2"> <jdbc:script location="classpath:db.sql"/> </jdbc:embedded-database>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close"> <property name="driverClassName" value="org.h2.Driver"/> <property name="url" value="jdbc:h2:/database"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean>
В первом случае создаётся база в памяти процесса, во втором открывается база данных /database на диске.
HSQLDB
Артефакт драйвера и самой базы:
<dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>2.3.3</version> </dependency>
Варианты создания DataSource:
<jdbc:embedded-database id="dataSource" type="HSQLDB"> <jdbc:script location="classpath:db.sql"/> </jdbc:embedded-database>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:file:/database"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean>
В первом случае создаётся база в памяти процесса, во втором открывается база данных /database на диске.
Apache Derby
<dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <version>10.12.1.1</version> </dependency>
Варианты создания DataSource:
<jdbc:embedded-database id="dataSource" type="DERBY"> <jdbc:script location="classpath:db.sql"/> </jdbc:embedded-database>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close"> <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver"/> <property name="url" value="jdbc:derby:/database"/> <property name="username" value="app"/> <property name="password" value="app"/> </bean>
В первом случае создаётся база в памяти процесса, во втором открывается база данных /database на диске.
MySQL
Артефакт драйвера:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
DataSource, который ожидает найти MySQL на локальной машине, соединяется с базой test, используя имя пользователя user и пароль password:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="user" /> <property name="password" value="password" /> </bean>
PostgreSQL
Артефакт драйвера:
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>9.4.1207.jre7</version> </dependency>
DataSource, который ожидает найти PostgreSQL на локальной машине, соединяется с базой test, используя имя пользователя user и пароль password:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="org.postgresql.Driver"/> <property name="url" value="jdbc:postgresql://127.0.0.1/test"/> <property name="username" value="user"/> <property name="password" value="password"/> </bean>
MS SQL и Sybase ASE
Артефакт драйвера:
<dependency> <groupId>net.sourceforge.jtds</groupId> <artifactId>jtds</artifactId> <version>1.3.1</version> </dependency>
DataSource, который ожидает найти MSSQL на сервере MS_SERVER, соединяется с базой test, используя имя пользователя user и пароль password в домене testDomain:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" /> <property name="url" value="jdbc:jtds:sqlserver://MS_SERVER/test;domain=testDomain;integrated security=false" /> <property name="username" value="user" /> <property name="password" value="password" /> </bean>
IDB DB2
Увы, драйвер IBM DB2 не распространяется через публичные репозитории. Его можно скачать вручную с сайта IBM.
DataSource, который ожидает найти IBM DB2 на локальной машине и соединяется используя имя пользователя user и пароль password:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver" /> <property name="url" value="jdbc:db2://localhost:50000/HCA:driverType=4;currentSchema=DB2ADMIN;" /> <property name="username" value="user" /> <property name="password" value="password" /> </bean>
Oracle
Артефакт драйвера:
<dependency> <groupId>ojdbc</groupId> <artifactId>ojdbc</artifactId> <version>14</version> </dependency>
DataSource, который ожидает найти Oracle database на локальной машине и соединяется используя имя пользователя user и пароль password:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521/DB" /> <property name="username" value="user" /> <property name="password" value="password" /> </bean>
Версии драйверов были верны на момент написания статьи, но в будущем наверняка изменятся.