Spring MVC adalah kerangka kerja Java yang digunakan untuk membangun aplikasi web. Ini mengikuti pola desain model-view-controller. Musim semi MVC menyediakan solusi elegan untuk menggunakan MVC dalam kerangka kerja musim semi dengan bantuan DispatcherServlet.
@Annotations
Spring adalah preloader aplikasi Rails. Ini mempercepat pengembangan dengan menjaga aplikasi Anda tetap berjalan di latar belakang sehingga Anda tidak perlu mem -boot setiap kali Anda menjalankan tes, tugas menyapu atau migrasi.
rails new untuk menghasilkan aplikasi Anda) Spring memanfaatkan Process.fork , jadi tidak akan dapat memberikan kecepatan pada platform yang tidak mendukung Forking (Windows, Jruby).
Tambahkan pegas ke gemfile Anda:
gem "spring" , group : :development (Catatan: Menggunakan gem "spring", git: "..." tidak akan berhasil dan bukan cara yang didukung untuk menggunakan musim semi.)
Disarankan untuk 'memfitifikasi' yang dapat dieksekusi di bin/ direktori Anda:
$ bundle install
$ bundle exec spring binstub --all
Ini menghasilkan bin/spring yang dapat dieksekusi, dan menyisipkan potongan kecil kode ke dalam executable yang ada yang relevan. Cuplikan terlihat seperti ini:
begin
load File . expand_path ( '../spring' , __FILE__ )
rescue LoadError
endPada platform di mana pegas diinstal dan didukung, cuplikan ini mengaitkan pegas ke dalam eksekusi perintah. Dalam kasus lain, cuplikan hanya akan diabaikan secara diam -diam dan garis setelah itu akan dieksekusi seperti biasa.
Jika Anda tidak ingin mengawali setiap perintah yang Anda ketik dengan bin/ , Anda dapat menggunakan direnv untuk secara otomatis menambahkan ./bin ke PATH Anda saat Anda cd ke aplikasi Anda. Cukup buat file .envrc dengan perintah PATH_add bin di direktori Rails Anda.
Untuk walkthrough ini saya telah membuat aplikasi Rails baru, dan menjalankan rails generate scaffold post name:string .
Mari Jalankan Tes:
$ time bin/rake test test/controllers/posts_controller_test.rb
Running via Spring preloader in process 2734
Run options:
# Running tests:
.......
Finished tests in 0.127245s, 55.0121 tests/s, 78.5887 assertions/s.
7 tests, 10 assertions, 0 failures, 0 errors, 0 skips
real 0m2.165s
user 0m0.281s
sys 0m0.066s
Itu tidak terlalu cepat karena itu adalah lari pertama, jadi Spring harus mem -boot aplikasi. Sekarang berjalan:
$ bin/spring status
Spring is running:
26150 spring server | spring-demo-app | started 3 secs ago
26155 spring app | spring-demo-app | started 3 secs ago | test mode
Lari berikutnya lebih cepat:
$ time bin/rake test test/controllers/posts_controller_test.rb
Running via Spring preloader in process 8352
Run options:
If we edit any of the application files, or test files, the changes will
be picked up on the next run without the background process having to
restart. This works in exactly the same way as the code reloading
which allows you to refresh your browser and instantly see changes during
development.
But if we edit any of the files which were used to start the application
(configs, initializers, your gemfile), the application needs to be fully
restarted. This happens automatically.
Let's "edit" `config/application.rb`:
$ touch config/application.rb $ bin/status status pegas berjalan:
26150 Spring Server | Spring-Demo-App | Dimulai 36 detik yang lalu 26556 Aplikasi Musim Semi | Spring-Demo-App | dimulai 1 detik yang lalu | mode uji
The application detected that `config/application.rb` changed and
automatically restarted itself.
If we run a command that uses a different environment, then that
environment gets booted up:
$ rute Bin /Rake berjalan melalui Spring Preloader dalam proses 2363 Posting Get /posts(.:Format) Posting#indeks posting /posts(.:format) Posting#Buat new_post get /posts/new(.:format) Posting#edit_post get /posts/:id/edit(.:format) POSTRET#Edit_Post /posts/:id(.:format) Posts#UPDATE DELETE /POSTS/:id(.:Format) Posting#Destroy
$ bin/status pegas musim semi sedang berjalan:
26150 Spring Server | Spring-Demo-App | Dimulai 1 menit yang lalu 26556 Aplikasi Musim Semi | Spring-Demo-App | dimulai 42 detik yang lalu | Mode Uji 26707 Aplikasi Musim Semi | Spring-Demo-App | dimulai 2 detik yang lalu | Mode Pengembangan
There's no need to "shut down" Spring. This will happen automatically
when you close your terminal. However if you do want to do a manual shut
down, use the `stop` command:
$ bin/musim semi musim semi berhenti.
From within your code, you can check whether Spring is active with `if defined?(Spring)`.
### Removal
To remove Spring:
* 'Unspring' your bin/ executables: `bin/spring binstub --remove --all`
* Remove spring from your Gemfile
### Deployment
You must not install Spring on your production environment. To prevent it from
being installed, provide the `--without development test` argument to the
`bundle install` command which is used to install gems on your production
machines:
$ bundle install -tanpa tes pengembangan
## Commands
### `rake`
Runs a rake task. Rake tasks run in the `development` environment by
default. You can change this on the fly by using the `RAILS_ENV`
environment variable. The environment is also configurable with the
`Spring::Commands::Rake.environment_matchers` hash. This has sensible
defaults, but if you need to match a specific task to a specific
environment, you'd do it like this:
``` ruby
Spring::Commands::Rake.environment_matchers["perf_test"] = "test"
Spring::Commands::Rake.environment_matchers[/^perf/] = "test"
# To change the environment when you run `rake` with no arguments
Spring::Commands::Rake.environment_matchers[:default] = "development"
rails console , rails generate , rails runner Ini mengeksekusi perintah rel yang sudah Anda kenal dan cintai. Jika Anda menjalankan sub Command yang berbeda (misalnya rails server ) maka Spring akan secara otomatis meneruskannya ke Executable rails yang mendasarinya (tanpa mempercepat).
Anda dapat menambahkan ini ke gemfile Anda untuk perintah tambahan:
Test::Unit pada Rel 3, karena hanya Rails 4 memungkinkan Anda menggunakan rake test path/to/test untuk menjalankan tes/direktori tertentu.Jika Anda tidak ingin kode terkait pegas diperiksa ke dalam repositori sumber Anda, dimungkinkan untuk menggunakan pegas tanpa menambahkan ke gemfile Anda. Namun, menggunakan binstub spring tanpa menambahkan pegas ke gemfile tidak didukung.
Untuk menggunakan pegas seperti ini, lakukan gem install spring dan kemudian awalan perintah dengan spring . Misalnya, alih -alih menjalankan bin/rake -T , Anda akan menjalankan spring rake -T .
Jika Anda menggunakan Spring BinStubs, tetapi sementara tidak ingin perintah berjalan melalui pegas, atur variabel lingkungan DISABLE_SPRING .
Spring menggunakan mekanisme pemuatan kelas Rails ( ActiveSupport::Dependencies ) untuk menjaga kode Anda tetap up to date antara uji berjalan. Ini adalah mekanisme yang sama yang memungkinkan Anda untuk melihat perubahan selama pengembangan saat Anda menyegarkan halaman. Namun, Anda mungkin tidak pernah menggunakan mekanisme ini dengan lingkungan test Anda sebelumnya, dan ini dapat menyebabkan masalah.
Penting untuk menyadari bahwa pemuatan ulang kode berarti bahwa konstanta dalam aplikasi Anda adalah objek yang berbeda setelah file berubah:
$ bin/rails runner 'puts User.object_id'
70127987886040
$ touch app/models/user.rb
$ bin/rails runner 'puts User.object_id'
70127976764620
Misalkan Anda memiliki config/initializers/save_user_class.rb So So:
USER_CLASS = User Ini menyimpan versi pertama dari kelas User , yang tidak akan menjadi objek yang sama dengan User setelah kode diisi ulang:
$ bin/rails runner 'puts User == USER_CLASS'
true
$ touch app/models/user.rb
$ bin/rails runner 'puts User == USER_CLASS'
false
Jadi untuk menghindari masalah ini, jangan simpan referensi ke konstanta aplikasi dalam kode inisialisasi Anda.
Pada musim semi 1.7, ada beberapa dukungan untuk melakukan ini. Lihat Contoh Repositori ini untuk informasi tentang cara melakukannya dengan Docker.
Spring akan membaca ~/.spring.rb dan config/spring.rb untuk pengaturan khusus. Perhatikan bahwa ~/.spring.rb dimuat sebelum bundler, tetapi config/spring.rb dimuat setelah bundler. Jadi, jika Anda memiliki permata spring-commands-* yang diinstal, Anda ingin tersedia di semua proyek tanpa harus ditambahkan ke gemfile proyek, mengharuskannya di ~/.spring.rb Anda.
config/spring_client.rb juga dimuat sebelum bundler dan sebelum proses server dimulai, dapat digunakan untuk menambahkan perintah tingkat atas baru.
Musim semi harus tahu cara menemukan aplikasi rel Anda. Jika Anda memiliki aplikasi normal, semuanya berfungsi di luar kotak. Jika Anda sedang mengerjakan proyek dengan pengaturan khusus (misalnya mesin), Anda harus memberi tahu Spring di mana aplikasi Anda berada:
Spring . application_root = './test/dummy' Tidak ada callback Spring.before_fork . Untuk menjalankan sesuatu sebelum garpu, Anda dapat menempatkannya di ~/.spring.rb atau config/spring.rb atau di salah satu file yang dapat dijalankan saat aplikasi Anda diinisialisasi, seperti config/application.rb , config/environments/*.rb atau config/initializers/*.rb .
Anda mungkin ingin menjalankan kode setelah musim semi membayar proses tetapi sebelum perintah yang sebenarnya dijalankan. Anda mungkin ingin menggunakan callback after_fork jika Anda harus terhubung ke layanan eksternal, melakukan pembersihan umum atau mengatur konfigurasi dinamis.
Spring . after_fork do
# run arbitrary code
end Jika Anda ingin mendaftarkan beberapa panggilan balik, Anda cukup menghubungi Spring.after_fork beberapa kali dengan blok yang berbeda.
Spring akan secara otomatis mendeteksi perubahan file ke file apa pun yang dimuat saat server boot. Perubahan akan menyebabkan lingkungan yang terkena dampak restart.
Jika ada file atau direktori tambahan yang harus memicu restart aplikasi, Anda dapat menentukannya dengan Spring.watch :
Spring . watch "config/some_config_file.yml"Secara default Spring Polls sistem file untuk perubahan setiap 0,2 detik. Metode ini memerlukan konfigurasi nol, tetapi jika Anda menemukan bahwa itu menggunakan terlalu banyak CPU, maka Anda dapat menggunakan sistem file berbasis acara dengan menginstal permata yang didengarkan pegas.
Untuk menonaktifkan pesan "Running Via Spring Preloader" yang ditampilkan setiap kali perintah berjalan:
Spring . quiet = trueVariabel lingkungan berikut digunakan oleh Spring:
DISABLE_SPRING - Jika diatur, pegas akan dilewati dan aplikasi Anda akan boot dalam proses latar depanSPRING_LOG - Jalur ke file mana Spring akan menulis pesan log.SPRING_TMP_PATH - Direktori tempat pegas harus menulis file sementara (pidfile dan soket). Secara default kami menggunakan variabel lingkungan XDG_RUNTIME_DIR , atau Dir.tmpdir , dan kemudian membuat direktori di spring-$UID yang bernama itu. Kami tidak menggunakan tmp/ direktori aplikasi Rails Anda karena itu mungkin pada sistem file yang tidak mendukung soket UNIX.SPRING_APPLICATION_ID - digunakan untuk mengidentifikasi aplikasi rel yang berbeda. Secara default itu adalah hash MD5 dari RUBY_VERSION saat ini, dan jalur ke root proyek rel Anda.SPRING_SOCKET - Jalur yang harus digunakan untuk soket Unix yang digunakan Spring untuk berkomunikasi dengan proses server pegas yang sudah berjalan lama. Secara default, ini adalah SPRING_TMP_PATH/SPRING_APPLICATION_ID .SPRING_PIDFILE - Jalur yang harus digunakan untuk menyimpan PID dari proses server pegas yang sudah berjalan lama. Secara default ini terkait dengan jalur soket; Jika jalur soket adalah /foo/bar/spring.sock , pidfile akan menjadi /foo/bar/spring.pid .SPRING_SERVER_COMMAND - Perintah yang harus dijalankan untuk memulai server Spring saat belum berjalan. Default ke spring _[version]_ server --background . Jika Anda ingin mendapatkan informasi lebih lanjut tentang apa yang dilakukan Spring, Anda dapat menjalankan Spring secara eksplisit di terminal terpisah:
$ spring server
Output logging akan dicetak ke stdout. Anda juga dapat mengirim output log ke file dengan variabel lingkungan SPRING_LOG .