Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在运行时更改C3P0用户和密码_Java_C3p0 - Fatal编程技术网

Java 如何在运行时更改C3P0用户和密码

Java 如何在运行时更改C3P0用户和密码,java,c3p0,Java,C3p0,当我启动时,我的配置是:user=test1&password=test1 我想把它改成user=test2&password=test2 代码如下: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:/config/spring/appcontext-test.xml" }) public class SingleDataSourceProcessorTest {

当我启动时,我的配置是:
user=test1&password=test1

我想把它改成
user=test2&password=test2

代码如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/config/spring/appcontext-test.xml" })
public class SingleDataSourceProcessorTest {

    @Autowired
    private ComboPooledDataSource masterDs;

    @Test
    public void test_c3p0_datasource_to_single_datasource()
            throws InterruptedException, SQLException {

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        query();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        query();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        Thread.sleep(3000);

         masterDs.setUser("test2");
         System.out.println("change username");
         masterDs.setPassword("test2");
         System.out.println("change password");

        Thread.sleep(3000);
    }

    private void query() throws SQLException {
        Connection conn = masterDs.getConnection();
        Statement stmt = conn.createStatement();
        ResultSet result = stmt.executeQuery("select @@read_only");
        result.close();
        stmt.close();
        conn.close();
    }
}
我的spring配置:

<bean id="masterDs" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/db1" />
    <property name="user" value="test1" />
    <property name="password" value="test1" />
    <property name="driverClass" value="com.mysql.jdbc.Driver" />
    <property name="minPoolSize" value="5" />
    <property name="maxPoolSize" value="25" />
</bean>

当代码仅更改了
用户
时,另一个线程使用错误的
用户
密码
对查询数据库并抛出异常


那么如何在运行时更改
用户
密码

您是否在jdbc url中嵌入了原始用户和密码?(如果是这样,就不要这样做。从您显示配置的方式来看,看起来是这样。)@SteveWaldman我使用属性。