Java开发技巧杂技

杂记一

创建项目的spring initializr,要求是创建spring boot3.0,且不在支持java8语言,且要求语言大于17,所以创建项目时,无法创建srping2.0项目了;如果要创建spring2.0,需要改server url,即获取创建模版的地址;地址使用阿里云的:https://start.aliyun.com

杂记二

1Panel是一个和宝塔一样的服务器管理面板,官方网站如下:

1Panel - 现代化、开源的 Linux 服务器运维管理面板

安装地址帮助地址如下:

在线安装 - 1Panel 文档

1Panel会以docker容器安装应用。

杂记三

配置prperties 编码如下:

settings——Editor——FileEncodings配置Default encoding for prperties files:

杂记四

settings——Plugins搜索maven-search,然后安装插件,该插件可以快速搜索jar包,可以不用上https://mvnrepository.com/网站上搜索。

安装完,Tools会增加MavenSearch菜单。

杂记五

在安装了docker的服务器,执行下面命令,可以进入容器内部。

docker exec -it <container-id> /bin/bash
docker exec -it fb623ac9704fb4bec8dc2a6cc84831890947728504c8fed8be57c0b5a3a6197a /bin/bash

在linux里执行下面命令,查看安装了哪些docker容器。

docker ps

which docker 命令用于查找 docker 命令所在的路径。

which docker

杂记六 使用1panel安装kafka

在maven-search中搜索kafka-clients,获取到依赖如下:

<dependency>
   <groupId>org.apache.kafka</groupId>
   <artifactId>kafka-clients</artifactId>
   <version>3.6.0</version>
</dependency>

然后编写连接kafka代码。

   
    static Collection<String> topicColl = Collections.singleton("my-topic");
    //生产者:键编码器
    static String keyEncoder = "org.apache.kafka.common.serialization.StringSerializer";
    //生产者:值编码器
    static String valueEncoder = "org.apache.kafka.common.serialization.StringSerializer";
    //消费者:键解码器
    static String keyDecoder = "org.apache.kafka.common.serialization.StringDeserializer";
    //消费者:值解码器
    static String valueDecoder = "org.apache.kafka.common.serialization.StringDeserializer";
​
    public static void main(String[] args) {
        SpringApplication.run(KKafkaApplication.class, args);
        producter1();
        consumer1();
    }
​
    static void producter1() {
        Properties properties = new Properties();
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "10.1.0.145:9092");
        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, keyEncoder);
        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, valueEncoder);
        properties.put(ConsumerConfig.GROUP_ID_CONFIG, "my-group-id");
        KafkaProducer<String, String> producer = new KafkaProducer<>(properties);
        String message = "hello world ";
        try {
            for (int i = 0; i < 10; i++) {
                // 异步写入数据
                String topic = topicColl.toArray()[0].toString();
                ProducerRecord<String, String> producerRecord = new ProducerRecord<>(topic, message + i);
                producer.send(producerRecord, new Callback() {
                    @Override
                    public void onCompletion(RecordMetadata metadata, Exception exception) {
                        if (Objects.nonNull(exception)) {
                            log.error(">>>>>>>>>>Producer生产消息异常:", exception);
                        }
                        if (Objects.nonNull(metadata)) {
                            log.info(">>>>>>>>>>Producer生产消息:metadata:{},partition:{}, offset:{}", metadata, metadata.partition(), metadata.offset());
                        }
                    }
                });
            }
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        } finally {
            producer.close();
        }
    }
​
    static void consumer1() {
        try {
            Properties properties = new Properties();
            properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "10.1.0.145:9092");
            properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, keyDecoder);
            properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, valueDecoder);
            properties.put(ConsumerConfig.GROUP_ID_CONFIG, "my-group-id");
            KafkaConsumer<String, String> consumer = new KafkaConsumer<>(properties);
            consumer.subscribe(topicColl);
            while (Boolean.TRUE) {
                ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(10000));
                for (ConsumerRecord<String, String> record : records) {
                    log.info(">>>>>>>>Consumer offset:{}, value:{}", record.offset(), record.value());
                }
            }
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        } 
    }

如果抛出异常java.net.UnknownHostException: kafka0001,则需要配置host文件。

在C:\Windows\System32\drivers\etc的host文件下,添加

10.1.0.145 kafka0001 

杂记六 flink

在linux部署Flink需要先安装JDK。

需要到官网先下载安装包。

官网下载地址:https://flink.apache.org/downloads/

各个版本下载地址:https://dlcdn.apache.org/flink/

然后使用final shell上传到 soft/resources下。

然后进入soft/resources,执行命令解压

tar -zxvf flink-1.18.0-bin-scala_2.12.tgz -C /soft/flink/

然后进入flink文件夹

 cd /soft/flink/flink-1.18.0/

然后进入conf。

cd conf

然后修改配置文件里的localhost都改为0.0.0.0

 vi flink-conf.yaml

然后执行命令启动

bin/start-cluster.sh 

然后放行8081,然后jps查看进程

jps

然后访问192.1.0.1:8081

flink使用maven快速创建java项目使用的包如下:

<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-quickstart-java -->
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-quickstart-java</artifactId>
    <version>1.18.0</version>
</dependency>

ps:flink官网学习地址:https://nightlies.apache.org/flink/flink-docs-stable/docs/try-flink/local_installation/

ps:flinkCDC,cdc不是flink提供的,是ververica提供的,参考地址:MySQL CDC 连接器 — CDC Connectors for Apache Flink® documentation (ververica.github.io)

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!