国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

電子商務(wù)公司網(wǎng)站建立前期準備網(wǎng)絡(luò)營銷管理名詞解釋

電子商務(wù)公司網(wǎng)站建立前期準備,網(wǎng)絡(luò)營銷管理名詞解釋,義烏seo優(yōu)化公司,蘭州市網(wǎng)站建設(shè)公司將 ProxySQL 配合 Spring Boot 使用,主要的目的是在 Spring Boot 應(yīng)用程序中實現(xiàn)對 MySQL 主從同步的讀寫分離和負載均衡。這樣,你可以利用 ProxySQL 自動將寫操作路由到主庫,而將讀操作路由到從庫。 1. 準備工作 確保你的 MySQL 主從同步環(huán)…

ProxySQL 配合 Spring Boot 使用,主要的目的是在 Spring Boot 應(yīng)用程序中實現(xiàn)對 MySQL 主從同步的讀寫分離和負載均衡。這樣,你可以利用 ProxySQL 自動將寫操作路由到主庫,而將讀操作路由到從庫。

1. 準備工作

確保你的 MySQL 主從同步環(huán)境和 ProxySQL 已經(jīng)成功配置并正常工作。接下來,我們將進行以下幾個步驟:

  • 配置 Spring Boot 連接 ProxySQL。
  • 配置 數(shù)據(jù)源 來支持讀寫分離。

2. 修改 Spring Boot 配置

在 Spring Boot 項目中,配置數(shù)據(jù)庫連接時,使用 ProxySQL 作為 MySQL 的代理。你需要將 Spring Boot 的 數(shù)據(jù)源配置 進行一些調(diào)整,以支持讀寫分離。

1.1 配置 application.yml(或 application.properties

你可以在 application.yml 中配置多個數(shù)據(jù)源,分別對應(yīng)主庫和從庫。ProxySQL 會作為一個代理處理讀寫分離。

示例:application.yml
spring:datasource:# 主數(shù)據(jù)源 (寫庫)primary:url: jdbc:mysql://127.0.0.1:6033/mydbusername: your_userpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10minimum-idle: 5pool-name: PrimaryPool# 從數(shù)據(jù)源 (讀庫)secondary:url: jdbc:mysql://127.0.0.1:6033/mydbusername: your_userpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10minimum-idle: 5pool-name: SecondaryPool# 設(shè)置數(shù)據(jù)源的路由策略jpa:hibernate:ddl-auto: updateproperties:hibernate:dialect: org.hibernate.dialect.MySQL8Dialectshow-sql: truedatabase-platform: org.hibernate.dialect.MySQL8Dialect

在這個配置文件中:

  • 主數(shù)據(jù)源(primary)用于寫入操作,連接到 ProxySQL 的主庫。
  • 從數(shù)據(jù)源(secondary)用于讀取操作,連接到 ProxySQL 的從庫。

ProxySQL 會根據(jù) SQL 語句的類型(SELECT 路由到從庫,INSERT/UPDATE 路由到主庫)自動分配流量。

1.2 配置 DataSource 路由

Spring Boot 默認只支持單個數(shù)據(jù)源。如果你需要同時配置多個數(shù)據(jù)源(主從分離),需要定義一個 數(shù)據(jù)源路由 類,將請求的數(shù)據(jù)庫連接動態(tài)路由到主庫或從庫。

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.example.repository")
public class DataSourceConfig {@Primary@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.primary")public DataSource dataSource() {return DataSourceBuilder.create().build();}@Bean(name = "secondaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.secondary")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}// 配置EntityManagerFactory和TransactionManager@Bean(name = "entityManagerFactory")public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) {return builder.dataSource(dataSource).packages("com.example.model") // 你的實體類包路徑.persistenceUnit("primary").build();}@Bean(name = "transactionManager")public PlatformTransactionManager transactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {return new JpaTransactionManager(entityManagerFactory);}
}

在這個配置中,我們定義了兩個數(shù)據(jù)源:primaryDataSourcesecondaryDataSource,分別連接到 ProxySQL 的主庫和從庫。

3. 實現(xiàn)動態(tài)數(shù)據(jù)源路由

為了動態(tài)選擇使用主庫還是從庫,你可以使用一個 AbstractRoutingDataSource 來實現(xiàn)動態(tài)的數(shù)據(jù)源路由。

public class DynamicDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {// 判斷當(dāng)前線程中是否有讀請求或者寫請求,選擇數(shù)據(jù)源return DataSourceContextHolder.getDataSourceType();}
}

然后創(chuàng)建一個 DataSourceContextHolder 用來管理當(dāng)前線程的數(shù)據(jù)源類型。

public class DataSourceContextHolder {private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();public static void setDataSourceType(String dataSourceType) {contextHolder.set(dataSourceType);}public static String getDataSourceType() {return contextHolder.get();}public static void clearDataSourceType() {contextHolder.remove();}
}

4. 配置 Service 層的讀寫分離

接下來,你需要在服務(wù)層中手動切換讀寫操作的數(shù)據(jù)源。通常,你可以通過注解來區(qū)分讀操作和寫操作。

@Service
public class UserService {@Transactionalpublic void saveUser(User user) {// 使用主庫保存數(shù)據(jù)DataSourceContextHolder.setDataSourceType("primary");userRepository.save(user);DataSourceContextHolder.clearDataSourceType();}public User getUser(Long id) {// 使用從庫查詢數(shù)據(jù)DataSourceContextHolder.setDataSourceType("secondary");User user = userRepository.findById(id).orElse(null);DataSourceContextHolder.clearDataSourceType();return user;}
}

在上面的代碼中,saveUser 方法會選擇主庫,而 getUser 方法會選擇從庫。

5. 配置 Spring AOP 自動切換數(shù)據(jù)源(可選)

你可以通過 AOP 來簡化讀寫分離的配置,使得你不需要手動設(shè)置數(shù)據(jù)源類型。只需在方法上使用自定義注解(如 @ReadOnly@WriteOnly),自動切換數(shù)據(jù)源。

自定義注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReadOnly {
}@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface WriteOnly {
}
創(chuàng)建 AOP 切面:
@Aspect
@Component
public class DataSourceAspect {@Before("@annotation(ReadOnly)")public void setReadOnlyDataSource() {DataSourceContextHolder.setDataSourceType("secondary");}@Before("@annotation(WriteOnly)")public void setWriteOnlyDataSource() {DataSourceContextHolder.setDataSourceType("primary");}@After("@annotation(ReadOnly) || @annotation(WriteOnly)")public void clearDataSource() {DataSourceContextHolder.clearDataSourceType();}
}

在這段代碼中:

  • 使用 @ReadOnly 注解的方法將會切換到從庫。
  • 使用 @WriteOnly 注解的方法將會切換到主庫。

6. 總結(jié)

通過以上步驟,你可以將 ProxySQL 與 Spring Boot 集成,實現(xiàn) MySQL 主從同步的讀寫分離和負載均衡。

  • ProxySQL 作為 MySQL 的代理,負責(zé)將讀請求路由到從庫,寫請求路由到主庫。
  • Spring Boot 通過配置多個數(shù)據(jù)源和動態(tài)路由來實現(xiàn)讀寫分離。
  • 你可以通過 AOP 或手動設(shè)置來決定何時使用主庫或從庫。
http://m.aloenet.com.cn/news/43922.html

相關(guān)文章:

  • 可以做視頻推廣的網(wǎng)站有哪些免費注冊個人網(wǎng)站不花錢
  • 上海龍象建設(shè)集團公司網(wǎng)站網(wǎng)絡(luò)平臺營銷
  • wordpress上傳swf網(wǎng)站優(yōu)化排名公司哪家好
  • 鄭州上海做網(wǎng)站的公司有哪些熊貓關(guān)鍵詞工具
  • 張家口手機臺app下載武漢百度推廣優(yōu)化
  • 公司網(wǎng)站維護費大概需要多少seo綜合查詢 站長工具
  • 東莞萬江網(wǎng)站制作網(wǎng)絡(luò)營銷產(chǎn)品的特點
  • 如何做網(wǎng)站的需求分析系統(tǒng)清理優(yōu)化工具
  • 閔行區(qū)做網(wǎng)站公司百度指數(shù)工具
  • 我們網(wǎng)站的優(yōu)勢北京seo報價
  • wordpress 獨立站營銷網(wǎng)站建設(shè)規(guī)劃
  • 純css做的響應(yīng)式網(wǎng)站一鍵優(yōu)化
  • 設(shè)計網(wǎng)站什么叫空間不穩(wěn)定seo關(guān)鍵詞排名優(yōu)化銷售
  • 大型購物網(wǎng)站開發(fā)網(wǎng)絡(luò)推廣軟文范文
  • 樂山網(wǎng)站建設(shè)培訓(xùn)學(xué)校網(wǎng)站seo優(yōu)化發(fā)布高質(zhì)量外鏈
  • ps網(wǎng)站設(shè)計怎么做快速收錄網(wǎng)
  • 如何讓人幫忙做網(wǎng)站網(wǎng)站檢測
  • 怎么做跳轉(zhuǎn)流量網(wǎng)站搜索引擎調(diào)詞軟件
  • 怎樣做網(wǎng)頁游戲網(wǎng)站線上推廣是什么意思
  • 網(wǎng)站如何做導(dǎo)航軟文營銷文章案例
  • 免費做頭像網(wǎng)站色盲圖
  • 百度網(wǎng)站是怎么做的營銷案例最新
  • 深圳建站公司專業(yè)公司最近熱點新聞事件2023
  • 焦作企業(yè)網(wǎng)站建設(shè)網(wǎng)站提交
  • 站長工具綜合查詢ip怎樣在百度答題賺錢
  • 羅崗網(wǎng)站建設(shè)手機網(wǎng)絡(luò)優(yōu)化軟件
  • 做網(wǎng)站專家種子搜索引擎
  • 怎么做微信電影網(wǎng)站nba最新交易匯總
  • wordpress 安全 插件高級seo
  • 網(wǎng)站空間虛擬主機長沙seo外包服務(wù)