- Tạo ứng dụng Spring Boot bằng Spring Launchizr
- Cấu hình Cassandra trong Spring Boot
- Định cấu hình nhóm kết nối Tomcat trên Spring Boot
- Định tuyến tin nhắn Camel đến Artemis được nhúng bằng WildFly
sử dụngứng dụng đơn
Khung phát triển đa nền tảng để phát triển nhiều thiết bị đầu cuốiỨNG DỤNG
khi nào, áp dụngHBuilder
Cửa sổ bật lên do chính nó cung cấp không đáp ứng được nhu cầu kinh doanh nên một thành phần cửa sổ bật lên tùy chỉnh showToast đã được phát triển. Thành phần này chủ yếu thực hiện các chức năng sau:
Để biết chi tiết về cách tải xuống mã hoàn chỉnh, vui lòng tham khảo chương [Đọc mở rộng].
Áp dụng các hướng dẫn tùy chỉnh kết hợp với các thành phần tùy chỉnh để triển khai logic điều khiển và hiển thị chế độ xem.vuex
Thực hiện quản lý nhà nước.
đầu tiên vàomain.js
Xác định các thành phần chung và đặt chúng vàoinitToast.js
Đăng ký$showBánh mì nướng
đếnVue
trên nguyên mẫu để tạo điều kiện thuận lợi cho các cuộc gọi toàn cầu.
// main.js nhập initToast từ "@/comComponents/bocft-toast/initToast.js" nhập showToast từ "@/comComponents/bocft-toast/bocft-toast.vue" initToast(Vue.comComponent('show); -bánh mì nướng',showToast);
initToast.js
Đăng ký$showBánh mì nướng
đếnVue
Logic triển khai trên nguyên mẫu như sau:
// initToast.js nhập Vuex từ 'vuex' hàm mặc định xuất initToast(v) { // Treo trên cửa hàng vào nguyên mẫu Vue toàn cầu v.prototype.$toastStore = new Vuex.Store({ state: { show:false, biểu tượng :"thành công",//thành công:thành công;thất bại:thất bại tiêu đề:"title", nội dung:'content', thành công:null, downLoadUrl:null, toastCloseIconShow: '', toastCloseIconStyle: '', ... }, Mutations: { HideToast(state) { // Điều khiển trang thanh điều hướng chương trình nhỏ // #ifndef H5 if(state.hideTabBar){ wx.showTabBar( ); // #endif state.show = false }, // Phương thức nút 1 ButtonOneClick(state, data) { let _this = this; console.log('data.flag:', data.flag) switch (data.flag) { case 'hide': state.show = false break; ... } }, // Phương thức nút 2 ButtonTwoClick (state, data) { let _this = this; this.progress = 0; this.upshow = true; // Chuyển đổi công tắc hiển thị thanh tiến trình (data.flag) { case 'reload': state.show = false; close() { this.show2 = false; //Đóng cửa sổ bật lên cập nhật this.upshow = false; //Đóng thanh tiến trình uni.showTabBar(); //Hiển thị thanh tab this.$emit('closeVersion' ); //Đóng show thành phần}, showToast(state,data) { state = Object.sign(state,data) console.log('state:', state.show = true // Khi không có nút được hiển thị, trì hoãn 2S để ẩn hộp nhắc nếu (!state.buttonShow) { setTimeout(()=>{ state.show = false return state.success(state.icon) },2000) } }, thành công(state,data) { // state = Object.sign( state,data) // console.log(state); // state.show = true // setTimeout(()=>{ // state.show = false // return state.success(state.icon) // },2000) } } }) // Đăng ký $showToast với nguyên mẫu Vue để tạo điều kiện cho các cuộc gọi toàn cầu v.prototype.$showToast = function (option) { if (typeof option === 'object') { // #ifndef H5 if(option.hideTabBar){ wx.hideTabBar() } // #endif console.log('-------------tùy chọn----------- ' , lựa chọn) v.prototype.$toastStore.commit('showToast', option) }else{ Throw "Giá trị được truyền vào cho mục cấu hình phải là: "+typeof option;
Logic hiển thị khung nhìn như sau:
// toast.vue < !-- Nút đóng cửa sổ bật lên--> {{title} {{title} {{content} {{buttonOneTitle} {{buttonTwoTitle} phần trăm="percent" đột quỵ-width="10"> phần trăm="percent" đột quỵ-width="10"> ButtonOneShow(){ trả lại cái này.$toastStore.state.buttonOneShow; }, nútTwoShow(){ trả lại cái này.$toastStore.state.buttonTwoShow }, nútOneTitleStyle(){ trả lại cái này.$toastStore.state.buttonOneTitleStyle }, toastBoxStyle( ){ trả lại cái này.$toastStore.state.toastBoxStyle; }, toastTitleSuccessStyle(){ trả lại cái này.$toastStore.state.toastTitleSuccessStyle }, toastTitleFailStyle(){ trả lại cái này.$toastStore.state.toastTitleFailStyle }, ButtonShowStyle(){ trả lại cái này.$toastStore.state.buttonShowStyle }; nútOneClickParam(){ trả về this.$toastStore.state.buttonOneClickParam; }, ButtonTwoClickParam(){ trả lại cái này.$toastStore.state.buttonTwoClickParam }, thành côngImgSrc(){ trả lại cái này.$toastStore.state.successImgSrc; $toastStore.state.failImgClass }, thành côngImgClass(){ trả lại cái này.$toastStore.state.successImgClass; }, failedImgSrc(){ trả lại cái này.$toastStore.state.failImgSrc }, nútOneTitle(){ trả lại cái này.$toastStore.state.buttonOneTitle }, nútTwoTitle( ){ trả lại cái này.$toastStore.state.buttonTwoTitle } }, mount() { setTimeout(()=>{ this.$toastStore.commit('hideToast') this.$toastStore.commit('success',"confirm") },2000) }, các phương thức:{ ButtonOneClick( param){ this.$toastStore.commit('buttonOneClick', {flag: param}) }, ButtonTwoClick(param){ this.$toastStore.commit('buttonTwoClick', {flag: param, url: this.downLoadUrl}) }, closeToast(){ this.$toastStore.commit('hideToast') }, clickBtn(res ){ this.$toastStore.commit('hideToast') this.$toastStore.commit('success',res) }, moveHandle(){ return; } }, beforeDestroy(){ this.$toastStore.commit('hideToast') }, } ButtonOneShow(){ trả lại cái này.$toastStore.state.buttonOneShow; }, nútTwoShow(){ trả lại cái này.$toastStore.state.buttonTwoShow }, nútOneTitleStyle(){ trả lại cái này.$toastStore.state.buttonOneTitleStyle }, toastBoxStyle( ){ trả lại cái này.$toastStore.state.toastBoxStyle; }, toastTitleSuccessStyle(){ trả lại cái này.$toastStore.state.toastTitleSuccessStyle }, toastTitleFailStyle(){ trả lại cái này.$toastStore.state.toastTitleFailStyle }, ButtonShowStyle(){ trả lại cái này.$toastStore.state.buttonShowStyle }; nútOneClickParam(){ trả về this.$toastStore.state.buttonOneClickParam; }, ButtonTwoClickParam(){ trả lại cái này.$toastStore.state.buttonTwoClickParam }, thành côngImgSrc(){ trả lại cái này.$toastStore.state.successImgSrc; $toastStore.state.failImgClass }, thành côngImgClass(){ trả lại cái này.$toastStore.state.successImgClass; }, failedImgSrc(){ trả lại cái này.$toastStore.state.failImgSrc }, nútOneTitle(){ trả lại cái này.$toastStore.state.buttonOneTitle }, nútTwoTitle( ){ trả lại cái này.$toastStore.state.buttonTwoTitle } }, mount() { setTimeout(()=>{ this.$toastStore.commit('hideToast') this.$toastStore.commit('success',"confirm") },2000) }, các phương thức:{ ButtonOneClick( param){ this.$toastStore.commit('buttonOneClick', {flag: param}) }, ButtonTwoClick(param){ this.$toastStore.commit('buttonTwoClick', {flag: param, url: this.downLoadUrl}) }, closeToast(){ this.$toastStore.commit('hideToast') }, clickBtn(res ){ this.$toastStore.commit('hideToast') this.$toastStore.commit('success',res) }, moveHandle(){ return; } }, beforeDestroy(){ this.$toastStore.commit('hideToast') }, } ButtonTwoClick(param){ this.$toastStore.commit('buttonTwoClick', {flag: param, url: this.downLoadUrl}) }, closeToast(){ this.$toastStore.commit('hideToast') }, clickBtn(res ){ this.$toastStore.commit('hideToast') this.$toastStore.commit('success',res) }, moveHandle(){ return; } }, beforeDestroy(){ this.$toastStore.commit('hideToast') }, } ButtonTwoClick(param){ this.$toastStore.commit('buttonTwoClick', {flag: param, url: this.downLoadUrl}) }, closeToast(){ this.$toastStore.commit('hideToast') }, clickBtn(res ){ this.$toastStore.commit('hideToast') this.$toastStore.commit('success',res) }, moveHandle(){ return; } }, beforeDestroy(){ this.$toastStore.commit('hideToast') }, }
Thêm, xóa, sửa đổi và truy vấn các bảng MySQL (nâng cao) 1. Mô tả loại ràng buộc cơ sở dữ liệu Ví dụ Ràng buộc NULL Sử dụng NOT NULL để chỉ định rằng cột không trống tên varchar(20) không null, đặc tả ràng buộc duy nhất UNIQUE
Đa luồng (nâng cao) 1. Chiến lược khóa thông thường 1.1 Khóa lạc quan Khóa bi quan Khóa tối ưu: Luôn giả sử tình huống tốt nhất Mỗi khi bạn đi lấy dữ liệu, bạn nghĩ rằng người khác sẽ không sửa đổi dữ liệu, nhưng khi bạn gửi bản cập nhật dữ liệu. và sau đó đánh giá xem có ai khác đã sửa dữ liệu trong khoảng thời gian này hay không.
Tôi tin vào một hệ thống được mã hóa chính xác - không thể xảy ra lỗi (như lỗi hoặc ngoại lệ) (lỗi máy chủ DB/memcached khiến truy vấn không thành công). Mã của chúng tôi không nên dựa vào bất kỳ giả định nào để hoạt động bình thường và phải được chứng minh là đúng bất cứ khi nào có thể. Nhưng để chắc chắn rằng tôi
1. Giới thiệu Mã chung cho phép bạn viết các hàm linh hoạt, có thể tái sử dụng, có thể sử dụng cho bất kỳ loại nào theo yêu cầu bạn xác định. Bạn có thể viết mã có thể tái sử dụng, có mục đích rõ ràng và trừu tượng. Generics là mạnh nhất của Swift
1. Tạo cấu hình chất lượng và các dự án liên quan 1. Tạo cấu hình chất lượng mã java mới 2. Thêm quy tắc vào cấu hình và xác nhận rằng có 4 quy tắc Thay đổi cấu hình quét cho dự án 2. Tạo ngưỡng chất lượng liên quan đến dự án 1.
Để biết cấu hình jenkinsfile, sharelibrary và jenkins hoàn chỉnh, hãy xem phần cuối cùng. Tự động khớp các nhánh đẩy gitlab 1. Thêm các tham số trình cắm Webhook chung để lấy thông tin nhánh được gửi lần này.
1. Tạo một ứng dụng mới trong gitlab 2. Cài đặt plugin gitlab trong jenkins 3. Sau khi cài đặt plugin, hãy sử dụng nó trong cấu hình bảo mật toàn cầu và định cấu hình xác thực gitlab 4. Tự động sử dụng thông tin đăng nhập hiện tại của gitlab sau khi đăng xuất và đăng nhập lại
1. Triển khai jenkins master 1. Tạo tệp YAML triển khai apiVersion: apps/v1 kind: Siêu dữ liệu triển khai: tên: je
1. Cài đặt Docker nexus wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum sạch tất cả
1. Tạo một tệp thư viện mới build.groovy package org.devops // Build type def Build(buildType,buildShell){
1. Mua sản phẩm 1. Cài đặt và định cấu hình plug-in cấu hình plug-in (trong dự án jenkins) 2. Chọn sản phẩm tương ứng 3. Sửa đổi tệp jenkins // Thêm mã sau Chuỗi tạo tácU
1.github tạo OAuth 2.jenkins cài đặt và định cấu hình plugin xác thực github jenkins định cấu hình để sử dụng xác thực github 3. Đăng xuất và đăng nhập lại
1. Thêm dự án Maven thử nghiệm 1. Tạo dự án gitlab mới 2. Nhập mã kho ứng dụng simple-java-maven-app (bạn có thể truy cập github hoặc Gittree) 3. Định cấu hình nguồn nội địa mvn
1. Thêm trình cắm AnsiColor 2. Kiểm tra cú pháp trình cắm 1. Mở bất kỳ cấu hình dự án đường ống nào, tìm cú pháp đường ống và nhấp vào kết nối nhảy, chọn trình cắm và xem trợ giúp 3. Sửa đổi thư viện chia sẻ kịch bản để tối ưu hóa
1. Khái niệm đường ống 1 nút/tác nhân (node) Nút là một máy, có thể là nút chính của Jenkins hoặc nút phụ. Chỉ định máy mà công việc hiện tại đang chạy qua nút (đây là cú pháp tập lệnh).
1. Sao lưu và khôi phục plug-in 1. Cài đặt plug-in sao lưu và khởi động lại hệ thống để xem 2. Bấm để vào chu trình cấu hình sao lưu và bấm Cài đặt Chỉ sao lưu các bản dựng được đánh dấu để giữ
1. Triển khai LDAP. Triển khai vùng chứa được sử dụng tại đây. Tham khảo triển khai thủ công: https://www.cnblogs.com/panwenbin-logs/p/16101045.html 1. Cài đặt docker wget -
Do phiên bản nguồn mở của sonarqube không hỗ trợ quản lý đa nhánh nên cùng một dự án sonar sẽ được chỉ định khi quét tất cả các nhánh, điều này không thuận tiện cho chúng tôi xem 1. Tải xuống địa chỉ dự án plug-in nguồn mở: https: //github.com/mc1arke/
1. Kiểm tra thủ công Lưu ý rằng phiên bản này đã chứa plugin quét ngôn ngữ Java. Không cần phải cài đặt riêng mã 1.clone git clone git@192.168.1.128:root/demo-maven-serv.
Tôi có tình huống tiếp theo. Từ biểu mẫu PHP, tôi chỉ nhận được ID công ty. Tôi cần sắp xếp tất cả tên người dùng bằng ID công ty đó. Tôi cần một mảng và xuất tất cả nhật ký có tên người dùng đó sang một bảng. Vấn đề của tôi là khi tôi thử bước tiếp theo: $sql2 = " CHỌN
Tôi là một lập trình viên xuất sắc, rất giỏi!