Config nhiều datasource
Em đang dùng spring boot 2.7. x. e cần config 2 data source vào ạ. Một DB em dùng mặc định config như bình thường ở properties và map với entity và repo của em. Một DB em chỉ dùng map với1 tới 2 DAO gọi native query. Anh có config sample cho em xin hướng dẫn với ạ. Có phải em chỉ cần config 1 cái cho datasource phụ thôi, còn cái default chính của em thì spring boot cũng đã config và ưu tiên cái đó không ạ. Em cũng muốn config trong properties và java. Không config xml ạ
Tối ưu xử lý
Em có câu query cần Union All 2 bảng lại để lấy data trả về 1 chuỗi data của các cột nối nhau bằng dấu |<p>
ví dụ: username|code|name|.....
</p>
<p>
Số lượng reocord lúc query ra thì 1M record. Em đang dùng Spring boot. Theo anh thì nên giới hạn số lượng mỗi lần query lên rồi gọi nhiều lần xuống DB. Hay là gọi 1 lần thì hơn ạ. Data em bắt buộc lấy đủ . Và em nên nối chuỗi bằng câu native query hay là lấy dữ liệu lên rồi xử lý bằng Java hơn ạ.
</p>
<p>
Em đang dùng EntityManager và tạo câu query native. trả về kiểu Stream<String> để xử lý và zip lại thành file data trả về luôn. Hướng xử lý tối ưu nhất là gì ạ a.
</p>
Kiểm tra tối đa request trong ngày trên 1 thiết bị
Em có làm 1 web không yêu cầu login, nhưng khi đẩy form xuống BE thì BE phải check là tối đa 1 thiết bị trong 1 ngày chỉ được 3 request. Có cách nào check vấn đề này được ko ạ. nếu em dùng tab ẩn danh, hay ip động hay có cách nào khác nó có thể spam được không ạ. Em chưa có hướng code cho đoạn này.
Tối ưu xử lý khi data nhiều
Em có 1 service api dùng spring boot gọi xuống DB để lấy data lên, data này có cỡ 1 triệu record. Web dùng spring boot MVC gọi api qua service đó để lấy data và down xuống file txt theo từng dòng và nén nó thành file zip. Service đó xử lý lâu dẫn tới timeout, có cách nào để tối ưu ở service và web của em không ạ.
Không hiểu kiểu gì luôn?
Hi anh Dũng, cả nhà mình,<p>
Em đang gặp vấn đề như sau:
</p>
<p>
Lưu 1 object xuống db, sau đó dùng id của object đó push vào kafka, đoạn code mô tả bên dưới:
</p>
<p>
var saveResult = this.repo.saveAndFlush(entity);
</p>
<p>
this.kafkaTemplate.send(topic, saveResult.getId());
</p>
<p>
Tuy nhiên khi listen topic trên thì thi thoảng vẫn có những trường hợp em gọi hàm findById bị not found.
</p>
<p>
Vậy có phải là việc listen topic trên diễn ra trước lúc transaction được commit ko nhỉ? Và cũng xin mọi người cách để giải quyết bài trên ạ
</p>
<p>
(Em đang dùng spring boot cả nhà ạ)
</p>
Cấu hình Async và Cluster cho Kafka
Em chào anh ạ. <p>
Hiện tại em đang làm 1 project kết nối giữa kafka và mongodb, em đang thực hiện như sau:
</p>
<ol start="1">
<li>, application.yml</li>
</ol>
<div class="markdown-block position-relative overflow-auto source-java">
<pre>
spring:
mongo:
enabled: false
hosts:
- host: 192.168.101.43
port: 27017
username: chatbot
password: chatbot@vtcc
authSource: chatbot_platform
kafka:
bootstrap:
servers: 192.168.101.43:9092, 192.168.101.69:9092
topic:
name: notification
orderName: order
topic-json:
name: notification
orderName: order
consumer:
group: myGroup
orderGroup: orderGroup
username: kafka
password: 123456aA@
</pre>
</div>2., AsyncConfig<div class="markdown-block position-relative overflow-auto source-java">
<pre>
<span class="pl-s">@Configuration</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> AsyncConfig {
<span class="pl-s">@Bean</span>(name = <span class="pl-s">"asyncTask"</span>)
<span class="pl-k">public</span> ThreadPoolTaskExecutor asyncTask() {
ThreadPoolTaskExecutor executor = <span class="pl-k">new</span> ThreadPoolTaskExecutor();
executor.setCorePoolSize(10); // Số lượng luồng cố định
executor.setMaxPoolSize(50); // Số lượng luồng tối đa
executor.setQueueCapacity(100); // Số lượng tác vụ chờ trong hàng đợi
executor.setThreadNamePrefix(<span class="pl-s">"asyncTask-"</span>);
executor.setKeepAliveSeconds(60);
executor.initialize();
<span class="pl-k">return</span> executor;
}
<span class="pl-s">@Bean</span>
<span class="pl-k">public</span> ExecutorService asyncExecutor() {
<span class="pl-k">return</span> Executors.newCachedThreadPool();
}
}
</pre>
</div>3., Kafka config<div class="markdown-block position-relative overflow-auto source-java">
<pre>
<span class="pl-s">@EnableKafka</span>
<span class="pl-s">@Configuration</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> KafkaConsumerConfig {
<span class="pl-s">@Value</span>(<span class="pl-s">"${spring.kafka.bootstrap.servers}"</span>)
private String bootstrapAddress;
<span class="pl-s">@Value</span>(<span class="pl-s">"${spring.kafka.consumer.group}"</span>)
private String consumerGroup;
<span class="pl-s">@Value</span>(<span class="pl-s">"${spring.kafka.consumer.orderGroup}"</span>)
private String orderGroup;
<span class="pl-s">@Value</span>(<span class="pl-s">"${spring.kafka.username}"</span>)
private String username;
<span class="pl-s">@Value</span>(<span class="pl-s">"${spring.kafka.password}"</span>)
private String password;
<span class="pl-s">@Bean</span>
<span class="pl-k">public</span> ConsumerFactory<String, String> smartNotificationConsumerFactory() {
Map<String, Object> props = <span class="pl-k">new</span> HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
props.put(ConsumerConfig.GROUP_ID_CONFIG, orderGroup);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, <span class="pl-s">"30000"</span>);
<span class="pl-k">if</span> (username != null && password != null) {
props.put(<span class="pl-s">"security.protocol"</span>, <span class="pl-s">"SASL_PLAINTEXT"</span>);
props.put(<span class="pl-s">"sasl.mechanism"</span>, <span class="pl-s">"PLAIN"</span>);
props.put(<span class="pl-s">"sasl.jaas.config"</span>, "org.apache.kafka.common.security.plain.PlainLoginModule required username="" + username + <span class="pl-s">""</span> password="" + password + <span class="pl-s">"";"</span>);
}
<span class="pl-k">return</span> <span class="pl-k">new</span> DefaultKafkaConsumerFactory<>(props);
}
<span class="pl-s">@Bean</span>
<span class="pl-k">public</span> ConcurrentKafkaListenerContainerFactory<String, String> smartNotificationKafkaListenerContainerFactory(
<span class="pl-s">@Qualifier</span>(<span class="pl-s">"asyncTask"</span>) ThreadPoolTaskExecutor executor) {
ConcurrentKafkaListenerContainerFactory<String, String> factory =
<span class="pl-k">new</span> ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(smartNotificationConsumerFactory());
factory.setConcurrency(3);
<span class="pl-k">return</span> factory;
}
}
</pre>
</div>Vì là lần đầu tiên làm nên em không rõ là với những cấu hình trên thì đã đáp ứng được async và kết nối theo cụm cluster đến kafka chưa ạ. Và làm cách nào để có thể kiểm tra đưọc ạ.<p>
Em cảm ơn anh!
</p>
Tìm kiếm không phân biệt hoa thường, không phân biệt dấu trong Spring Data MongoDB
Với sql em set lại collate để tìm kiếm không phân biệt hoa thường, không phân biệt dấu.<p>
Sau khi chuyển sang mongodb, em không biết làm cách nào để tìm kiếm giống sql
</p>
Maven - Dependency
Em chào anh ạ. Anh cho em hỏi, em đang có 1 project em chia thành các module nhỏ trong đó có module "common" em dùng mongo-java-driver<div class="markdown-block position-relative overflow-auto source-java">
<pre>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>${mongodb.version}</version>
</dependency>
</pre>
</div>Bây giờ ở 1 module mới em muốn dùng sang Mongo của Spring mà vẫn muốn dùng các config của common<div class="markdown-block position-relative overflow-auto source-java">
<pre>
<dependency>
<groupId>com.example.common</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</pre>
</div>Vì tính chất không thể thay đổi ở common, vậy có cách nào có thể dùng Mongo của Spring ở module mới mà không bị conflix thư viện với mongo ở module "common" không ạ.<p>
Em cảm ơn ạ
</p>
Spring khởi tạo Servlet/ Server Port như thế nào
Em chào anh, anh cho em hỏi em đang sử dụng Spring MVC. Em muốn hiểu được Servlet và Server Port khi chạy ứng dụng sẽ được khởi tạo như thế nào. Anh có thể giải thích giúp em được không ạ. Em cảm ơn ạ
Spring: singleton có ý nghĩa gì và tại sao lại phải tạo singleton?
Em chào anh.<p>
Em mới mua sách "Làm chủ các mẫu thiết kế kinh điển trong lập trình" của anh. Em thấy ngay phần đầu tiên anh có đề cập đến singleton. Em mới chuyển ngành sang làm dev có một câu hỏi mong anh có thế giải thích ạ.
</p>
<p>
Trong Spring Boot singleton được tạo ra nếu đánh dấu nó là 1 bean, vậy singleton có ý nghĩa gì và tại sao lại phải tạo singleton. Để hiểu cách nó tạo ra thì làm như thế nào được ạ?
</p>
Hướng phát triển
Spring(nên biết thêm những gì), những công nghệ cần biết khi làm việc với spring,...
hỏi về Aeron thay cho UDP
e chào a, lâu r em k nc với anh vì em bận cv cá nhân quá trời <p>
cho em hỏi a từng tìm hiểu aeron chưa ạ, liệu nó có ổn hơn socket k ạ, cái này nó na ná với UDP, tức là cần tốc độ còn mất data cũng được anh ạ, dùng để lám livestream hoặc game online, k làm chat realtime đc vì nó mất msg
</p>