忙活了好几天,度娘也查了好几天,最后在自己的服务器搞起了ipv6网络,最后终于搞定了对ipv6的改造工作。

Mysql(这个最简单)

1.修改my.cnf配置

// 修改mysql配置文件
vim /etc/my.cnf
// 添加对ipv6的支持
[mysqld]
bind-address = ::

 2.springboot中application.yml修改jdbc连接

url: jdbc:mysql://address=(protocol=tcp)(host=2409:8c20:399:1000::aea:7408)(port=3306)/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai

3.启动项目,测试mysql

Mongodb(一般)

1.修改mongodb.conf文件,保存文件后重启进程即可

bind_ip = 0.0.0.0,::  
ipv6=true

2.修改application.yml中mongodb连接配置

spring:
  mongodb:
    url: 2409:8c20:399:1000::aea:7407/27017, 2409:8c20:399:1000::aea:7408/27017, 2409:8c20:399:1000::aea:7409/27017
    database: test
    username: admin
    password: 123456

3.重写mongodb连接

package com.chinamobile.cmss.mg.ar.core.common.config;

import com.mongodb.*;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;

import java.util.ArrayList;
import java.util.List;


@Configuration
public class MongoConfig {

    @Value("${spring.mongodb.url}")
    private String url;

    @Value("${spring.mongodb.database}")
    private String database;

    @Value("${spring.mongodb.username}")
    private String username;

    @Value("${spring.mongodb.password}")
    private String password;

    @Bean
    public MongoClient rawClient(){
        MongoCredential credential=MongoCredential.createCredential(username ,database , password.toCharArray());

        String[] split = url.split(",");

        List<ServerAddress> serverAddressList = new ArrayList<>();
        for(String str : split) {
            String[] hostUrl = str.split("/");
            ServerAddress serverAddress = new ServerAddress(hostUrl[0], Integer.parseInt(hostUrl[1]));

            serverAddressList.add(serverAddress);
        }

        MongoClientSettings setting=MongoClientSettings.builder()
                .credential(credential)
                .applyToClusterSettings(builder ->
                        builder.hosts(serverAddressList)
                ).build();
        return MongoClients.create(setting);
    }

    @Bean
    public MongoDatabaseFactory mongoDatabaseFactory(){
        //注册一个MongoDatabaseFactory,连接到指定数据库
        return new SimpleMongoClientDatabaseFactory(rawClient(), database);
    }

    @Bean
    public MongoTemplate mongoTemplate(){
        //将MongoDatabaseFactory作为参数,注册MongoTemplate
        return new MongoTemplate(mongoDatabaseFactory());
    }
}

4.启动项目,测试mongodb

Redis(不好搞)

我是弄成集群模式的,单机的不太清楚,勿怪

1.修改集群中每个redis.conf


bind 0.0.0.0 ::
protected-mode no
port 7006
daemonize yes
requirepass 123456
cluster-enabled yes
cluster-config-file nodes-7006.conf

2.启动redis集群模式,网上很多教学,就不在这里说了

3.修改application.yml中redis连接配置

spring.redis:
  nodes: 2409:8c20:399:1000::aea:7404/6379,2409:8c20:399:1000::aea:7405/6379,2409:8c20:399:1000::aea:7406/6379,2409:8c20:399:1000::aea:7407/6379,2409:8c20:399:1000::aea:7408/6379,2409:8c20:399:1000::aea:7409/6379
  password: 123456
  timeout: 6000
  max-active: 1000  # 连接池最大连接数(使用负值表示没有限制)
  max-wait: -1      # 连接池最大阻塞等待时间(使用负值表示没有限制)
  max-idle: 10      # 连接池中的最大空闲连接
  min-idle: 5       # 连接池中的最小空闲连接

4.用jedisCluster重写redis连接

package com.chinamobile.cmss.mg.ar.core.common;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;

import java.util.HashSet;
import java.util.Set;

@Configuration
@PropertySource("classpath:application.yml")
public class JedisClusterConfig {

    @Value("${spring.redis.nodes}")
    private String clusterNodes;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.timeout}")
    private Integer timeout;
    @Value("${spring.redis.max-active}")
    private Integer maxActive;
    @Value("${spring.redis.max-wait}")
    private Integer maxWait;
    @Value("${spring.redis.max-idle}")
    private Integer maxIdle;
    @Value("${spring.redis.min-idle}")
    private Integer minIdle;

    @Bean
    public JedisCluster getJedisCluster() {
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();
        config.setMaxWaitMillis(maxWait);
        config.setMinIdle(minIdle);
        config.setMaxIdle(maxIdle);
        // 获取集群ip数组;
        String[] serverArray = clusterNodes.split(",");
        Set<HostAndPort> nodes = new HashSet<>();
        for (String ipPort : serverArray) {
            // 分割ip和port
            String[] ipPortPair = ipPort.split("/",2);
            nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.valueOf(ipPortPair[1].trim())));
        }
        JedisCluster jedisCluster = new JedisCluster(nodes,timeout,timeout,1,password ,config);
        return jedisCluster;
    }
}

5. 启动项目 测试redis

总结,搞了好几天,出了很多问题。其中最重要的还是要确定自己本地的环境是否支持ipv6。推荐个网站,可以测试自己本地网络是否可以连接ipv6。Test your IPv6.

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐