У меня есть веб-приложение, основанное на веб-сервисе Spring JDBC и Джерси RESTful. Я использую следующий Spring JDBC класс шаблона для инициирования DataSource и выполнить скрипт SQL (update_condition_table.sql): конфигурационный файлКак выполнить сценарий SQL только один раз при запуске весной?
public class CustomerJDBCTemplate implements CustomerDAO {
private DataSource dataSource;
private JdbcTemplate jdbcTemplateObject;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplateObject = new JdbcTemplate(dataSource);
Resource rc = new ClassPathResource("update_condition_table.sql");
JdbcTestUtils.executeSqlScript(jdbcTemplateObject, rc, false);
}
// ......other methods
}
фасоль beans.xml:
<!-- Initialization for data source -->
<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/customer" />
<property name="username" value="root" />
<property name="password" value="mypassword" />
</bean>
<!-- Definition for customerJDBCTemplate bean -->
<bean id="customerJDBCTemplate" class="com.example.db.CustomerJDBCTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
Джерси класс контроллера содержит экземпляра класса CustomerJDBCTemplate
и служит в качестве веб-службы REST:
@Path("/customer")
public class CustomerService {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
CustomerJDBCTemplate dbController = (CustomerJDBCTemplate) context.getBean("customerJDBCTemplate");
// ... some GET/POST methods
}
Когда я начал свой веб-приложение, введя индекс URL в браузер, SQL-скрипт запускается компонентом customerJDBCTemplate
. Однако, когда я щелкнул, чтобы перейти на другие страницы, он разбился и сообщил, что сценарий SQL не может быть выполнен снова. Таким образом, очевидно, что SQL-скрипт был выполнен снова после инициализации dataSource и первоначального запуска веб-страницы индекса. Как этого избежать, просто запуская сценарий SQL только один раз при первом запуске веб-приложения?
Похоже, мне нужно переместить код экземпляра компонента из класса CustomerService
, но где я должен поместить этот код?
Это не поможет после того, как я попробовал. Тем не менее, я нашел правильный путь (см. Мой собственный ответ ниже). – tonga