java服務器啟動mysql,服務器的啟動

本文目錄一覽:

java怎麼連接mysql數據庫

java 連接 mysql 和連接oracle 是相同的

第一步 配置驅動

第二步 配置數據庫服務地址默認端口 3306

第三步 打開連接(配置用戶和密碼)

具體代碼如下:

String url = “jdbc:mysql://localhost:3306/javademo?user=rootpassword=rootuseUnicode=truecharacterEncoding=UTF8”;

Class.forName(“com.mysql.jdbc.Driver”);// 動態加載mysql驅動

conn = DriverManager.getConnection(url);

Statement stmt = conn.createStatement();

如何用java開啟mysql事務,要求詳細

看你是什麼事務,jdbc事務,還是分布式事務,還是容器事務

1,編程式事務管理(jdbc的事務是綁定在connection上的)

Connection conn = null;

try

{

Class.forName(“com.mysql.jdbc.Driver”);

conn = DriverManager.getConnection(“jdbc:oracle:thin:@host:1521:SID”,”username”,”password”);

conn.setAutoCommit(false); //取消自動提交

PreparedStatement ps = conn.prepareCall(“update something”);

ResultSet rs = ps.executeQuery();

conn.commit(); //手動提交

}

catch (Exception e)

{

conn.rollback();

e.printStackTrace();

}

finally

{

conn.close();

}

2,聲明式事務

先在工程的application.xml配置文件中添加如下代碼,開啟事務

!– 聲明式事務控制配置 —

tx:annotation-driven transaction-manager=”txManager”/

bean id=”txManager” class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”

property name=”datasource” ref=”bassDataSource”/property

/bean

然後在你需要開啟事務的接口前面添加註解

@Transactional(rollbackFor = IOException.class)

public void add(String name) throws IOException

{

System.out.println(“可以再類里和方法裡面添加事務註解0~0”);

throw new IOException();

}

直接調用接口方法就好

分布式事務處理(mysql貌似在5.X之後才支持) 的話,

1.可以直接使用spring+atomikos框架進行管理

參考:

就不貼測試代碼了,自己看着配置吧

2,使用JTA(Java Transaction API)進行分布式事務管理(測試代碼如下)

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import javax.naming.InitialContext;

import javax.sql.DataSource;

import javax.transaction.SystemException;

import javax.transaction.UserTransaction;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

//分布式事務處理

public class transferAccount

{

@SuppressWarnings(“null”)

public void testTransferAccount()

{

JAVA連mysql

查看了Mysql的文檔,以及Connector/J的文檔以及在線說明發現,出現這種異常的原因是:Mysql服務器默認的“wait_timeout”是8小時,也就是說一個connection空閑超過8個小時,Mysql將自動斷開該 connection。這就是問題的所在,在C3P0 pools中的connections如果空閑超過8小時,Mysql將其斷開,而C3P0並不知道該connection已經失效,如果這時有 Client請求connection,C3P0將該失效的Connection提供給Client,將會造成上面的異常。

上網搜索,在MySQL的論壇上找到一個辦法,就是如果在執行sql語句的時候發生了上述異常,就將sql語句重新執行一次。

試驗發現,這個辦法對這個使用spring+hibernate的服務無效。

進一步搜索發現,MySQL官方不推薦使用autoReconnect=true,參見

需要另外找別的辦法來解決這個問題。

由於問題產生的根本原因在於服務到數據庫的連接長時間沒活動,既然重新連接的辦法無效,就可以嘗試另外一種辦法,就是反空閑。

自己寫一個線程來反空閑的話,比較麻煩。

最後在網上找到一個辦法。為hibernate配置連接池,推薦用c3p0,然後配置c3p0的反空閑設置idle_test_period,只要小於MySQL的wait timeout即可。

在hibernate.cfg.xml中增加下面幾項:

!– configuration pool via c3p0–

property name=”hibernate.connection.provider_class”org.hibernate.connection.C3P0ConnectionProvider/property

property name=”c3p0.min_size”5/property

property name=”c3p0.max_size”30/property

property name=”c3p0.time_out”1800/property !– seconds –!– default: 0 —

property name=”c3p0.max_statement”50/property !– default: 0 —

property name=”c3p0.acquire_increment”1/property !– default: 1 —

property name=”c3p0.idle_test_period”120/property !– seconds –!– default: 0 —

property name=”c3p0.validate”true/property

修改完後測試,問題解決。

——————————————————–

DBCP連接池說明:

driverClassName

url

username

password

上面四個分別是驅動,連接字符串,用戶名和密碼

maxActive 連接池支持的最大連接數

maxIdle 連接池中最多可空閑maxIdle個連接

minIdle 連接池中最少空閑maxIdle個連接

initialSize 初始化連接數目

maxWait 連接池中連接用完時,新的請求等待時間,毫秒

timeBetweenEvictionRunsMillis timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每

timeBetweenEvictionRunsMillis毫秒秒檢查一次連接池中空閑的連接,把空閑時間超過minEvictableIdleTimeMillis毫秒的連接斷開,直到連接池中的連接數到minIdle為止

minEvictableIdleTimeMillis 連接池中連接可空閑的時間,毫秒

removeAbandoned true,false,是否清理removeAbandonedTimeout秒沒有使用的活動連接,清理後並沒有放回連接池

removeAbandonedTimeout 活動連接的最大空閑時間

logAbandoned true,false,連接池收回空閑的活動連接時是否打印消息

minEvictableIdleTimeMillis,removeAbandonedTimeout這兩個參數針對的連接對象不一樣,minEvictableIdleTimeMillis針對連接池中的連接對象,removeAbandonedTimeout針對未被close的活動連接.

c3p0連接池說明:

driverClass

jdbcUrl

user

password

minPoolSize

maxPoolSize

initialPoolSize

acquireIncrement 池中沒有空閑連接時,一次請求獲取的連接數

maxIdleTime 池中連接最大空閑時間

acquireRetryAttempts 獲取連接失敗後,重新嘗試的次數

acquireRetryDelay 嘗試連接間隔時間,毫秒

checkoutTimeout 等待連接時間,0為無限等待,毫秒

DebugUnreturnedConnectionStackTraces true,false,是否收回未返回的活動連接

unreturnedConnectionTimeout 活動連接的時間.

jdbcurl建議不要使用autoReconnect=true。

———————————————————————-

session.close();沒有調用connection.close()嗎?

如果你的Connection來自於連接池,他只不過被歸還給池了,確實沒有物理關閉,這是正常的結果。

若調用connection.close(), 此連接對象是關閉,還是沒有關閉,只返回給了連接池 ?

那要看連接池的實現了。一般都是返回給連接池,因為新建連接的開銷太大了。

創建一個SessionFactry就對應一個Connection,面SessionFactory中的Session是共享Connection .所以關閉Session對Connection沒有影響的.

數據庫連結池不過就是一個特殊的對象池而已。 對象池的作用就是避免你直接new資源性的對象,降低開銷。把連結返回給連結池就是釋放對該對象池中該Connection對象的引用,這樣,這個對象可以給再次被別人使用。 你調用conn.close(),僅僅是釋放了引用而已,不會關閉物理的連接。

connection對像在鏈接池中複寫了close方法,所以並沒有真正意義上的關閉。明白了吧。當然不同的鏈接池有不同的實現方法,connection只是一個接口,不同的鏈接池實現類是不一樣的,只是我們感覺不到罷了。

如何用java 5分鐘實現一個最簡單的mysql代理服務器

public class MysqlProxyServer {

private static final Logger logger = LoggerFactory.getLogger(MysqlProxyServer.class);

public static void main(String[] args) {

Vertx.vertx().deployVerticle(new MysqlProxyServerVerticle());

}

public static class MysqlProxyServerVerticle extends AbstractVerticle {

private final int port = 3306;

private final String mysqlHost = “10.10.0.6”;

@Override

public void start() throws Exception {

NetServer netServer = vertx.createNetServer();//創建代理服務器

NetClient netClient = vertx.createNetClient();//創建連接mysql客戶端

netServer.connectHandler(socket – netClient.connect(port, mysqlHost, result – {

//響應來自客戶端的連接請求,成功之後,在建立一個與目標mysql服務器的連接

if (result.succeeded()) {

//與目標mysql服務器成功連接連接之後,創造一個MysqlProxyConnection對象,並執行代理方法

new MysqlProxyConnection(socket, result.result()).proxy();

} else {

logger.error(result.cause().getMessage(), result.cause());

socket.close();

}

})).listen(port, listenResult – {//代理服務器的監聽端口

if (listenResult.succeeded()) {

//成功啟動代理服務器

logger.info(“Mysql proxy server start up.”);

} else {

//啟動代理服務器失敗

logger.error(“Mysql proxy exit. because: ” + listenResult.cause().getMessage(), listenResult.cause());

System.exit(1);

}

});

}

}

public static class MysqlProxyConnection {

private final NetSocket clientSocket;

private final NetSocket serverSocket;

public MysqlProxyConnection(NetSocket clientSocket, NetSocket serverSocket) {

this.clientSocket = clientSocket;

this.serverSocket = serverSocket;

}

private void proxy() {

//當代理與mysql服務器連接關閉時,關閉client與代理的連接

serverSocket.closeHandler(v – clientSocket.close());

//反之亦然

clientSocket.closeHandler(v – serverSocket.close());

//不管那端的連接出現異常時,關閉兩端的連接

serverSocket.exceptionHandler(e – {

logger.error(e.getMessage(), e);

close();

});

clientSocket.exceptionHandler(e – {

logger.error(e.getMessage(), e);

close();

});

//當收到來自客戶端的數據包時,轉發給mysql目標服務器

clientSocket.handler(buffer – serverSocket.write(buffer));

//當收到來自mysql目標服務器的數據包時,轉發給客戶端

serverSocket.handler(buffer – clientSocket.write(buffer));

}

private void close() {

clientSocket.close();

serverSocket.close();

}

}

}

測試一下

try {

Class.forName(name);//指定連接類型

Connection conn = DriverManager.getConnection(url, user, password);//url為代理服務器的地址

PreparedStatement pst = conn.prepareStatement(“select * from test;”);//準備執行語句

ResultSet resultSet = pst.executeQuery();

while (resultSet.next()) {

System.out.println(resultSet.getLong(1) + “: ” + resultSet.getString(2));

}

} catch (Exception e) {

e.printStackTrace();

}

java中怎麼連接mysql數據庫

java鏈接MySQL數據庫和鏈接其他數據庫, 基本都是一樣的套路

準備工作:

1: 數據庫驅動. 導入項目

2: 啟動MySQL服務

編碼工作:

        // 1.註冊驅動

Class.forName(“com.mysql.jdbc.Driver”);

// 2.連接數據庫

Connection conn = DriverManager.getConnection(DB_URL, NAME, PSWD);

    //數據庫地址,用戶名,密碼

// 3.準備執行sql語句

        Statement stat = conn.createStatement();

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/193894.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 09:41
下一篇 2024-12-02 09:41

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論